node.js https请求错误事件问题

时间:2014-01-22 02:39:35

标签: node.js https callback econnreset

我正在使用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)事务是一个请求和一个响应,它怎么可能是一个请求,但可能有两个响应。

我检查了node.js官方文档,它说

  

如果在请求期间遇到任何错误(与DNS相关)   分辨率,TCP级错误或实际的HTTP解析错误)'错误'   在返回的请求对象上发出事件。

所以我想也许http(s)请求和响应工作正常,错误发生在'TCP级别',但为什么回调被调用两次?

0 个答案:

没有答案
相关问题