web-dev-qa-db-fra.com

TypeError: res.json n'est pas une fonction

J'essaye d'envoyer deux json mais ça ne marche pas. Il imprime TypeError: res.json is not a function mais je ne comprends pas pourquoi cela se produit. Y a-t-il des idées? Je vous remercie !!

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);
      })
});
5
boombamboo

Parce que vous écrasez votre variable res dans le .then de votre fonction 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")
15
tymeJV

.json n'est pas une fonction. Sauf si vous utilisez une bibliothèque qui en fait une, JavaScript utilise JSON (avec deux méthodes .parse() et .stringify() dont l'une est utilisée dans la ligne ci-dessus).

Si vous essayez de définir une propriété d'objet avec le nom .json, alors ce serait:

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

Avec la nouvelle bibliothèque httpClient, vous n'avez pas besoin d'appeler la méthode .json (), utilisez simplement cette carte simple au lieu de la méthode json. 

.map(res => res );
0
shivam srivastava