request.end() 后重新发送响应
resend response after request.end()
我在编写正确的回调时遇到困难。
当用户向“/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
我在编写正确的回调时遇到困难。 当用户向“/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