在request.end()之后重新发送响应

时间:2015-02-27 11:49:02

标签: javascript node.js http express

我在编写正确的回调时遇到了困难。 当用户向" / city"服务器必须向第三方服务请求查询数据。为此我做http.request(),请求和接收数据(没有问题)。然后我需要将数据传输到getCity()函数外的res.send()。

我不知道。请解释一下解决方案和工作原理。谢谢!

var getCity = function(response) {
  var str = ''
  response.on('data', function (chunk) {
    str += chunk;
  });

  response.on('end', function () {
      //what to do?
  });
}

app.get('/city', function (req, res) {
    var request = http.request(options, getCity);
    request.end();  
    res.send("ok"); //need sending str from getCity instead of "ok";
});

1 个答案:

答案 0 :(得分:2)

我建议使用以下方法来解决某些任务,

var cityDecorator = function(req,res,next) {
  var str = ''
  http.request(options, function(response){
    response.on('data', function (chunk) {
      str += chunk;
    });

    response.on('end', function () { 
        req.params.cityValue = str; // N1
        next(); // N2
    });
  }).end();
}

app.get('/city',cityDecorator, function (req, res) {
    res.send(req.params.cityValue);
});

N1:你可以只发送来自该行的响应,但我更喜欢并建议仅从一个文件发送响应,所以将来如果你想要更改res,或想要装饰,或渲染或其他什么,你只需要处理一个文件,即您的路径文件。

这只有在你使用express时才会起作用,你的代码就像你一样,但如果没有那么评论,我会为那个场景提供解决方案。 GL