express.js:如何在app.get中使用http.request返回的值

时间:2014-08-28 19:42:33

标签: javascript node.js http express callback

我想使用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 /'时返回它?

2 个答案:

答案 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();