簡體   English   中英

nodejs req.on('end', callback) 不起作用屬性

[英]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");
});

看這里nodejs.org event-finish

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM