我想使用app.get从另一个域的API传递数据。我可以将数据写入控制台,但页面上没有任何内容出现('〜/ restresults')。
这是我到目前为止的代码:
app.get('/restresults', function (req, res) {
var theresults;
var http = require('http');
var options = {
port: '80' ,
hostname: 'restsite' ,
path: '/v1/search?format=json&q=%22foobar%22' ,
headers: { 'Authorization': 'Basic abc=='}
} ;
callback = function(res) {
var content;
res.on('data', function (chunk) {
content += chunk;
});
res.on('end', function () {
console.log(content);
theresults = content ;
});
};
http.request(options, callback).end();
res.send(theresults) ;
});
如何将http.request的结果绑定到变量并在请求'restresults /'时返回它?
答案 0 :(得分:2)
将res.send(theresults);
移至此处:
callback = function(res2) {
var content;
res2.on('data', function (chunk) {
content += chunk;
});
res2.on('end', function () {
console.log(content);
theresults = content ;
res.send(theresults) ; // Here
});
};
注意:您必须将res
更改为其他内容,因为您需要快递res
,而不是请求res
。
回调是异步调用。您在从请求中获得结果之前发送了响应。
您还需要处理出现错误的情况,否则客户端的请求可能会挂起。
答案 1 :(得分:2)
您正在回拨之前(来自http请求)发送回复。
http.request
是异步的,脚本不会等到它完成,然后将数据发送回客户端。
您必须等待请求完成,然后将结果发送回客户端(最好在callback
函数中)。
示例:
http.request(options, function(httpRes) {
// Notice that i renamed the 'res' param due to one with that name existing in the outer scope.
/*do the res.on('data' stuff... and any other code you want...*/
httpRes.on('end', function () {
res.send(content);
});
}).end();