从 URL 起请求 JSON 天并将响应发送到文档

Request JSON data from URL and send respond out to document

我正在尝试向 API returns JSON 发送请求,然后在我自己的 url 中显示该请求但是当我运行此代码时它显示控制台上有来自 API 的响应,但它无法将其发送到文档 usisng res.send 我需要一些帮助来了解我在哪里可以将其发送到文档,而不仅仅是在控制台中。还有一个问题是我这样做对还是应该使用路由器?谢谢。

// 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))
        }
    })
})

问题是您用 request res 对象覆盖了 express res

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)
        }
    })
})

对嵌套回调使用相同的变量名 res 是问题的根源,您应该将代码更新为

// 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);
        }
    })
})