我在编写正确的回调时遇到困难。
当用户向“ / 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";
});

最佳答案

我建议使用以下方法来完成某些任务,

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

07-28 03:51