Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从URL请求JSON数据并向文档发送响应_Json_Node.js_Express_Node Request - Fatal编程技术网

从URL请求JSON数据并向文档发送响应

从URL请求JSON数据并向文档发送响应,json,node.js,express,node-request,Json,Node.js,Express,Node Request,我试图发送一个请求到一个返回JSON的API,然后在我自己的url中显示该请求,但当我运行此代码时,它显示控制台上有来自API的响应,但它无法将其发送到文档usingres。send我需要一些帮助,以知道我可以将该请求发送到哪里,而不仅仅是在控制台中。还有一个问题,我这样做是正确的还是应该使用路由器?多谢各位 // Include Express library var express = require('express') var app = express() // Inlcude Req

我试图发送一个请求到一个返回JSON的API,然后在我自己的url中显示该请求,但当我运行此代码时,它显示控制台上有来自API的响应,但它无法将其发送到文档usingres。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))
        }
    })
})

问题在于,您正在使用
请求
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
对象覆盖
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);
        }
    })
})

对嵌套回调使用相同的变量名
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);
        }
    })
})

您可以使用res.json(obj)
directly@MahmoudEzzat我试过了,在控制台上它说:res.json不是一个可以使用的函数
res.json(obj)
directly@MahmoudEzzat我试过了,在控制台上它说:res.json不是函数谢谢!我的错谢谢!我的错误