在Nodejs应用程序中,如何在Express方法中创buildHTTP客户端请求

当浏览器或curl客户端调用我的节点快递应用程序,我想从外部网站获取JSON数据并返回它,但是,尽pipe看到嵌套的http调用返回JSON数据回到我的快递服务器我争取得到JSON返回到调用浏览器 – 我该怎么做?

这里是目前的testing应用程序代码与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的结果(不返回正文数据): 在这里输入图像描述

服务器端控制台日志显示已收到http请求数据: 在这里输入图像描述

所有的build议/指针赞赏!

       

网上收集的解决方案 "在Nodejs应用程序中,如何在Express方法中创buildHTTP客户端请求"

就像一个替代scheme(由marcelino提供的答案可以正常工作),通过使用Express和http.request()提供的stream ,你可以缩短你的代码(并保存一些内存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(); }); 

看起来,您需要等待嵌套的响应返回之前发出实际的响应,如下所示:

 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 ,它是空的,为什么你看不到它。