![](/img/trans.png)
[英]node.js ~ express req.on('end') triggers but not req.on('data')
[英]nodejs req.on('end', callback) doesn't work property
我目前正在使用 nodejs 構建代理,它使用以下語法來發送和接收 https 請求和響應。 但是在我的項目中,響應稍微大一點,因此通常,在調用 req.on('end', callback) 之前, req.on('data', 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' 的回調函數一次。
我相信必須有一些通用的方法來解決這個問題(似乎是 node 中的一個經典錯誤),如果有人能指出如何解決這個屬性,我們將不勝感激。
謝謝您的幫助!
從您包含的代碼中,不可能發出兩個請求。 它提出了一個請求:
var req = http.request(options, function(res) { ... });
然后在此處綁定錯誤處理程序:
req.on('error', function(e) { ... });
然后立即之前甚至等待對請求的任何響應,正在取得甚至連接之前,它調用.write()
和.end()
請求對象的方法:
req.write('<SOMETHING>');
req.end();
這里沒有什么可能導致同時發出兩個請求。 但即使第一個(也是唯一的)請求還沒有開始,你已經調用了.write()
和.end()
方法,所以也許這就是你的問題。
除此之外,如果您打算像您所說的那樣並行執行幾個請求,那么您應該期望在另一個請求完成之前啟動一個請求。
我以前有同樣的問題,我是這樣解決的:
res.on('finish', function () {
console.log("res finished");
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.