【问题标题】:Handle ECONNRESET in nodejs https.request在 nodejs https.request 中处理 ECONNRESET
【发布时间】:2015-03-19 16:10:19
【问题描述】:

所以有时会出现网络或服务器问题,并且 https.request 会因 ECONNRESET 而失败。我认为正确的做法是重试指数退避延迟,从无开始,并建立几个小时。但如果它更容易,我可以延迟 5 分钟。我读过一篇关于异步错误处理的文章,但我找不到任何像这样简单的例子。请问我可以得到一个工作示例吗? 谢谢!

【问题讨论】:

  • 也许我应该使用一个库,比如 backoff 或 socket.io?
  • 我经常遇到这个错误,因为我的项目的端口已经被使用了,你可以检查你的项目运行的端口并杀死它,或者更改其他端口来运行

标签: node.js error-handling


【解决方案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 中添加一个随机毫秒数,以使其每次都不那么精确。

【讨论】:

  • 那么,将您对https.request() 的调用放入您从error 事件处理程序调用的函数中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 2020-09-01
  • 2018-06-08
  • 1970-01-01
  • 2019-09-12
相关资源
最近更新 更多