我目前正在使用 nodejs 构建代理,它使用以下语法来发送和接收 https 请求和响应。但是在我的项目中,响应有点大,所以通常 req.on('data', callback) 会在 req.on('end', callback) 被调用之前被调用 5~7 次。
这是简化的代码结构:
var http = require("https");
var options = {
hostname: '<WEB SERVICE>',
port: 80,
path: '<WEB PATH>',
method: 'POST',
headers: {
'Content-Type': 'application/json',
}
};
var response = "";
var req = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (body) {
console.log("data");
response += body;
});
res.on('end', function () {
console.log("end");
response = "";
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
// write data to request body
req.write('<SOMETHING>');
req.end();
理想情况下,当多个请求进来时,日志记录顺序应该是:
data, data, data, data, data, end, data, data, data, data, end
即一旦完成一个请求,end 将被调用一次。
但是,在做了几次测试后,反应很大。序列变为:
<response 1 comes>data, data, data ..... data <response 2 comes> data, data, data, ..., data, end
即缺少请求 1 的结尾。
简而言之,我们需要确保在多次回调 req.on('data', callback) 之后立即调用 'end' 的回调。
我相信必须有一些通用的方法来解决这个问题(似乎是节点中的一个经典错误),如果有人能指出如何解决这个属性,我将不胜感激。
谢谢您的帮助!