1

node.js (10.23) https lib を使用して、サードパーティの Web サービスにリクエストを送信しています。すべて問題ないように見えますが、最近、私を混乱させる奇妙な問題を見つけました。

コードは次のとおりです。

var https = require('https');        

function callWebService(requestOpts,body,accessToken,callback){
    var options = {
        host: requestOpts.host, 
        path: requestOpts.path,
        method: 'POST',
        headers: {
            'Content-Type':'application/json',
            'Content-Length': Buffer.byteLength(body),  
            'Authorization':'Bearer '+accessToken
        }
    };

    var req = https.request(options, function(res) {
        logger.log('STATUS: ' + res.statusCode);
        logger.log('HEADERS: ' + JSON.stringify(res.headers));

        if(res.statusCode!='200') {
            var error = new Error("Web service call failed");
            return callback(error);           
        } else {
            logger.log('web service call success');
            return callback();
        }   
    });

    req.on('error', function(e) {
        logger.error('call web service,error occurs: ' + e.message);
        return callback(e);     
    });
    req.write(body);
    req.end();
}

時々 (毎回ではありません)、ログに成功とエラーの両方が表示されます。エラーは「ECONNRESET の読み取り」です。なぜこれが起こるのかよくわかりません。

私の見解では、http(s) トランザクションは 1 つの要求と 1 つの応答です。

そして、node.jsの公式ドキュメントを確認したところ、

リクエスト中にエラーが発生した場合 (DNS 解決、TCP レベルのエラー、または実際の HTTP 解析エラーなど)、返されたリクエスト オブジェクトで「エラー」イベントが発行されます。

したがって、http(s) の要求と応答が正常に機能し、「TCP レベル」でエラーが発生する可能性があると思いますが、コールバックが 2 回呼び出されるのはなぜですか?

4

0 に答える 0