TypeError:res.json不是函数

时间:2017-02-06 19:27:50

标签: javascript json node.js express

我正在尝试发送两个json,但它不起作用。它会打印TypeError: res.json is not a function,但我不知道为什么会发生这种情况。有什么想法吗?谢谢!!

app.post('/danger', function response(req, res) {
    let placeId = req.body.data;
    let option = {
      uri: 'https://maps.googleapis.com/maps/api/directions/json?',
      qs: {
        origin:`place_id:${placeId[0]}`, destination: `place_id:${placeId[1]}`,
        language: 'en', mode: 'walking', alternatives: true, key: APIKey
      }
    };
    rp(option)
      .then(function(res) {
        let dangerRate = dangerTest(JSON.parse(res), riskGrid);
        res.json({ data: [res, dangerRate]});
      })
      .catch(function(err) {
        console.error("Failed to get JSON from Google API", err);
      })
});

4 个答案:

答案 0 :(得分:17)

因为您在res函数的.then覆盖了rp变量:

app.post('/danger', function response(req, res) { //see, "res" here was being overwritten
   ..
   ..
   rp(option).then(function(response) { //change the variable name of "res" to "response" (or "turtles", who cares, just dont overwrite your up most "res")

答案 1 :(得分:2)

.json不是一个功能。除非您使用的是一个库,否则JavaScript会使用JSON(使用两个方法.parse().stringify(),其中一个方法在上面一行中使用。)

如果您尝试按名称.json设置对象属性,那么它将是:

res.json = {data: [res, dangerRate]};

答案 2 :(得分:0)

有了新的httpClient库,您不需要调用.json()方法,只需使用此简单映射即可代替json方法。

.map(res => res );

答案 3 :(得分:0)

在您的情况下,您在嵌套中编写 res ,但如果您编写 response(res,req) ,也会得到相同的错误。

所以一定要检查顺序