2017-05-07 2 views
0

Ich versuche, eine Anfrage an eine API zu senden, die JSON zurückgibt und dann diese Anfrage in meiner eigenen URL anzeigt, aber wenn ich diesen Code ausführe, zeigt es, dass es eine Antwort von API gibt Die Konsole kann aber nicht senden, um es zu dokumentieren. res.send Ich brauche Hilfe, um zu wissen, wohin ich das an das Dokument senden kann, nicht nur in der Konsole. Noch eine Frage, mache ich das richtig oder soll ich Router benutzen? Vielen Dank.JSON-Daten von URL anfordern und Antwort an Dokument senden

// Include Express library 
var express = require('express') 
var app = express() 
// Inlcude Request library 
var request = require('request') 
// Inlcude Http/Https library 
var http = require('http') 
var https = require('https') 

app.use('/postman/tracks', function (req, res) { 
    res.setHeader('Content-Type', 'application/json'); 
    var carrier = req.query.carrier 
    var number = req.query.number 
    var url = 'http://api.goshippo.com/v1/tracks/' + carrier + '/' + number 
    var response = request({ 
     url: url, 
     json: true 
    }, function (err,res,obj) { 
     if (!err && res.statusCode === 200) { 
      console.log(JSON.stringify(obj)) 
      //res.send(JSON.stringify(obj)) 
     } 
    }) 
}) 
+0

Sie verwenden können, um seine 'res.json (obj)' direkt – Ezzat

+0

@ MahmoudEzzat Ich habe das versucht und in der Konsole hieß es: res.json ist keine Funktion – thunpisit

Antwort

2

Mit denselben Variablennamen res für die verschachtelten Rückrufe die Ursache des Problems ist, sollten Sie Ihren Code aktualisieren

// Include Express library 
var express = require('express') 
var app = express() 
// Inlcude Request library 
var request = require('request') 
// Inlcude Http/Https library 
var http = require('http') 
var https = require('https') 

app.use('/postman/tracks', function (req, res) { 
    res.setHeader('Content-Type', 'application/json'); 
    var carrier = req.query.carrier 
    var number = req.query.number 
    var url = 'http://api.goshippo.com/v1/tracks/' + carrier + '/' + number 
    var response = request({ 
     url: url, 
     json: true 
    }, function (err, response ,obj) { 
     if (!err && response.statusCode === 200) { 
      console.log(JSON.stringify(obj)) 
      res.json(obj); 
     } 
    }) 
}) 
+0

Danke! Mein Fehler – thunpisit

1

Das Problem ist, dass Sie expressres mit requestres Objekt überschrieben sind.

app.use('/postman/tracks', function (req, res) { 
    //... 
    request({ 
     url: url, 
     json: true 
    }, function (err,response, obj) { //Changed res with response 
     if (!err && response.statusCode === 200) { 
      console.log(JSON.stringify(obj)) 
      //res.send(JSON.stringify(obj)) 
      res.json(obj) 
     } 
    }) 
}) 
+1

Danke! Mein Fehler – thunpisit

Verwandte Themen