web-dev-qa-db-de.com

TypeError: res.json ist keine Funktion

Ich versuche zwei Json zu schicken, aber es funktioniert nicht. Es druckt TypeError: res.json is not a function, aber ich verstehe nicht warum es passiert. Gibt es Ideen? Vielen Dank !!

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

Weil Sie Ihre res-Variable im .then Ihrer rp-Funktion überschreiben:

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 ist keine Funktion. Wenn Sie keine Bibliothek verwenden, die es zu einer Bibliothek macht, verwendet JavaScript JSON (mit den beiden Methoden .parse() und .stringify(), von denen Sie eine in der obigen Zeile verwenden).

Wenn Sie versuchen, eine Objekteigenschaft mit dem Namen .json festzulegen, wäre dies:

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

Mit der neuen httpClient-Bibliothek müssen Sie die .json () -Methode nicht aufrufen. Verwenden Sie einfach diese einfache Map anstelle der Json-Methode. 

.map(res => res );
0