当浏览器或curl客户端调用我的node express应用程序时,我想从外部网站获取JSON数据并返回它,但是尽管看到嵌套的http调用将JSON数据返回给我的快速服务器,我正在努力获取JSON返回调用浏览器 - 我该怎么做?
以下是具有curl响应的当前测试应用代码:
var http = require('http');
var app = require('express')();
app.get('/', function (req, res) {
var str = '';
var options = {
host: 'jsonplaceholder.typicode.com',
path: '/posts/1'
};
callback = function(response) {
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
console.log(str);
});
}
var req = http.request(options, callback);
res.send(str);
req.end();
});
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
这是CURL localhost:3000的结果(没有返回正文数据):
所有建议/指示赞赏!
答案 0 :(得分:6)
作为替代方案(marcelino提供的答案可以正常工作),您可以使用Express和http.request()
提供的streams来缩短代码(并节省一些内存) ,像这样:
app.get('/', function(req, res) {
http.request('http://jsonplaceholder.typicode.com/posts/1', function(response) {
response.pipe(res);
}).on('error', function(e) {
res.sendStatus(500);
}).end();
});
答案 1 :(得分:4)
在发出实际响应之前,您需要等待嵌套响应返回,如下所示:
app.get('/', function (req, res) {
var str = '';
var options = {
host: 'jsonplaceholder.typicode.com',
path: '/posts/1'
};
var callback = function(response) {
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
console.log(str);
res.send(str); // SEND ACTUAL RESPONSE HERE
});
}
var req = http.request(options, callback);
req.end();
});
否则,您立即发送str
并且它已空,这就是为什么您无法看到它。