-1

現在、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

つまり、1 つの要求が完了すると、end が 1 回呼び出されます。

しかし、いくつかのテストを行った後、応答が大きい場合。シーケンスは次のようになります。

<response 1 comes>data, data, data ..... data <response 2 comes> data, data,       data, ..., data, end

つまり、リクエスト 1 の末尾がありません。

つまり、req.on('data', callback) のコールバックを数回実行した直後に、'end' のコールバックが正確に 1 回呼び出されるようにする必要があります。

この問題を解決するための一般的な方法が必要だと思います (ノードの古典的なバグのようです)。誰かがこのプロパティを解決する方法を示すことができれば幸いです。

助けてくれてありがとう!

4

2 に答える 2

0

以前も同じ問題がありましたが、次のように修正しました。

res.on('finish', function () { 
    console.log("res finished");
});

こちらをご覧くださいnodejs.org event-finish

于 2021-10-27T09:58:42.307 に答える