Joe*_*ter 3 http node.js express
当浏览器或curl客户端调用我的节点快速应用程序时,我想从外部网站获取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!');
});
Run Code Online (Sandbox Code Playgroud)
这是CURL localhost:3000的结果(没有返回正文数据):

所有建议/指针赞赏!
作为替代方案(marcelino提供的答案可以正常工作),您可以使用Express提供的流来缩短代码(并节省一些内存)http.request(),如下所示:
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();
});
Run Code Online (Sandbox Code Playgroud)
在发送实际响应之前,您似乎需要等待嵌套响应返回,如下所示:
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();
});
Run Code Online (Sandbox Code Playgroud)
否则,您立即发送str并且它是空的,因此您看不到它。