http nodejs上的ECONNRESET错误

时间:2015-03-24 17:38:39

标签: node.js rest httprequest

我正在尝试通过nodejs上的http库向rest API发出一个简单的http请求。 通话两分钟后,请求会触发此错误:

{ [Error: read ECONNRESET] 
code: 'ECONNRESET', 
errno: 'ECONNRESET', 
syscall: 'read' }

服务器正在运行,因为当我使用PHP或使用Chrome的扩展 Advanced Rest Client 进行此调用时,它可以正常工作。我无权访问服务器日志或服务器配置。

我几乎可以肯定我的呼叫是到达服务器的,因为地址错误,我收到错误的地址错误,并且使用不同的端口,我收到超时错误。

var http = require('http');

var post = {
    "id": msgId,
    "otherdata": { "user": user } 
};
var content = JSON.stringify(post);

// prepare the header
var postheaders = {
    'Content-Type' : 'application/x-www-form-urlencoded',
    'Content-Length' : Buffer.byteLength(content, 'utf8'),
    'Accept-Encoding': 'gzip,deflate,sdch',
    'Accept-Language': 'en-US,en;q=0.8'
};

// the post options
var optionspost = {
    host : Constants.API_HOST,
    port : Constants.API_PORT,
    path : Constants.API_PATH,
    method : 'POST',
    headers : postheaders
};

// I found a solution that recommended adding the following code, but it didn't work either:
var keepAliveAgent = new http.Agent({ keepAlive: true });
optionspost.agent = keepAliveAgent;

// do the POST call
var request = http.request(optionspost, function(res) {
    res.on('data', function(d) {
        // never reached here
        console.info(data);
    });
    res.on("end", function(){
        // never reached here also
        console.info(data);
    });
});
request.write(content);
request.end();
request.on("error", function(e){
    // ECONNRESET error is triggered here...
    console.info(e);
});

我当时认为可能是节点的http库使用不当,所以我考虑使用另一个库进行其他API调用。

建议任何人?

谢谢! =)

1 个答案:

答案 0 :(得分:0)

如果有人发现这种情况: 我的问题是地址端口。因为我没有访问外部API,所以我看不到错误日志,但问题是他们移动了端口而另一个仍然是打开的,但没有功能。 所以,服务器是可以访问的,但没有响应 - 这就是这个错误:没有响应,超时后会抛出此错误。

感谢您的帮助!