在nodejs https.request中处理ECONNRESET

时间:2015-03-19 16:10:19

标签: node.js error-handling

因此,有时会出现网络或服务器问题,并且https.request会因ECONNRESET而失败。我认为正确的做法是重复使用指数退避延迟,从无,以及建立长达数小时。但如果它更容易,我可以使用5分钟的延迟。我已经阅读了一篇关于异步错误处理的文章,但是我还没有能够找到这样简单的例子。我能得到一个有效的例子吗? 谢谢!

1 个答案:

答案 0 :(得分:1)

只需在请求对象上附加error事件处理程序:

var req = https.request(...);
req.on('error', function(err) {
  // handler `err` here ...
});

重试:

// waits 1 second on first error, then 2, then 4, then 8, etc.
function makeRequest(url, lastTimeout) {
  lastTimeout || (lastTimeout = 500);
  var req = https.request(url, ...);
  req.on('error', function(err) {
    console.error(err);
    lastTimeout *= 2;
    setTimeout(makeRequest, lastTimeout, url, lastTimeout);
  });
}

// call function
makeRequest('https://google.com');

您可能希望在重试时设置某种上限,因此它不会无限期地重试。您还可以将随机数毫秒添加到lastTimeout,以使其每次都不那么精确指数。