Nodejs http 超时或错误时重试

2024-01-30

我正在尝试在超时或错误时自动重试 HTTP 请求。
目前我的代码如下所示:

var req = http.get(url, doStuff)
              .on('error', retry)
              .setTimeout(10000, retry);

但是,单个请求有时可能会同时触发“错误”和“超时”事件。实施重试的更好方法是什么?


我一直在寻找同样的东西并发现了有趣的模块请求重试 https://www.npmjs.com/package/requestretry,非常适合这样的要求。

这是用法:

var request = require('requestretry')

request({
  url: myURL,
  json: true,
  maxAttempts: 5,  // (default) try 5 times 
  retryDelay: 5000, // (default) wait for 5s before trying again
  retrySrategy: request.RetryStrategies.HTTPOrNetworkError // (default) retry on 5xx or network errors
}, function(err, response, body){
  // this callback will only be called when the request succeeded or after maxAttempts or on error 
  if (response) {
    console.log('The number of request attempts: ' + response.attempts);
  }
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nodejs http 超时或错误时重试 的相关文章

随机推荐

  • 使用 JQuery PreventDefault(),但仍将路径添加到 URL

    我正在开发一个网站 点击某个链接将会滑下登录面板 我在用event preventDefault 阻止网站重定向以及向下滑动面板的动画事件 单击链接时 面板向下滑动 url 保持不变 单击链接时我希望面板正常显示动画 但链接的 href 属
  • 没有服务器的私有版本控制[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 检查列表中的项目是否在列表类型的列中可用

    我正在尝试迭代一个列表 其中数据框中的一列每行都有列表 list1 安装 安装 已安装 替换 修复 修复 替换 部分 二手 新 df lwr nopunc spc nostpwrd head 3 daily ask questions da
  • 检查向量中的值是否在不同长度向量的值范围内[重复]

    这个问题在这里已经有答案了 所以我正在 R 中工作 并且有一个大型数据框 其中包含一个具有如下基因组位置的向量 2655180 2657176 2658869 第二个数据框具有一系列位置和一个基因 如下所示 chr1 100088228 1
  • 将 lambda 表达式转换为缓存的唯一键

    我查看了与此类似的其他问题 但找不到任何可行的答案 我一直在使用以下代码来生成唯一键 用于将 linq 查询的结果存储到缓存中 string key LambdaExpression expression Body ToString for
  • 如何选择要使用 flutter web 上传的文件和图像

    我想知道如何从用户计算机中选择图像到我的 flutter web 应用程序中进行上传 Using dart html不建议直接在 Flutter 中打包 相反 使用这个包 https pub dev packages file picker
  • Python函数:查找购买金额的变化[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在寻找最有效的方法来计算购买金额中的找零金额 25美分 10美分 5美分和1美分 购买金额必须低于1美元 找零从1美元起 我需要知
  • 当 JsonObject 的键被迭代时,它们的顺序与服务器响应中的顺序不同

    我收到来自服务器的非常大的 JSON 字符串响应 我将其转换为 JSON 对象 然后获取密钥并迭代它 问题是 当我迭代时 它的顺序与服务器响应的顺序不同 接下来 我应用另一种方法 将所有键添加到List
  • GDB无法显示堆栈并显示“#1 0x0000000000000000 in ?? ()”

    我有一个多线程 C 程序 在极少数情况下会死锁 这个问题很难重现 我只能在远程机器上重现它 我想用来解决这个问题的方法是 运行程序 等待死锁 向其发送中止信号以生成核心转储 将转储复制回我的本地计算机 使用gdb来调试它 我在远程计算机上没
  • 如何创建实体关系图(ERD)

    有谁知道在 R 中创建实体关系图 ERD 的简单方法除了graphviz和 或DiagrammeR 我不经常使用 graphviz 并且经常花费比我想记住它的语法更多的时间来创建一个简单的图形 我想创造一些类似于 Hadley Wickha
  • 如何从不均匀长度的列表创建分组条形图

    我正在尝试绘制具有不同数据长度的数据组 您是否知道如何可视化仅包含两个对象的女性列表 而不用零填充其余对象来获取男性列表的长度 这是我到目前为止得到的代码 import matplotlib import matplotlib pyplot
  • 如何在 Django 中的过滤器之前应用开窗函数

    我有这些模型 class Customer models Model class Job models Model customer models ForeignKey Customer payment status models Fore
  • 在 foreach 循环之外声明变量

    在 for 循环情况下 我可以在 for 语句之外声明索引 例如 代替 for int i 0 i lt 8 i 我可以 int i for i 0 i lt 8 i 现在与 foreach 循环相比 我必须在循环内声明变量 foreach
  • 如何一次从 docker repo 中提取所有 docker 容器镜像?

    我有一个私人 docker 存储库 其中存储了 10 个容器映像 我想将所有图像拉到一台机器上 有没有一种方法可以使用单个命令从存储库中提取所有图像 一些命令 例如 docker pull xx xx com reponame 在研究过程中
  • Rails4Friendly_id 独特的 Slug 格式

    我正在使用Friendly id gem 来攻击我的模型 由于当我输入相同的数据来检查时 slug 必须是唯一的 因此我会在 slug 中附加一个长哈希值 Explore explore Explore explore 7a8411ac 5
  • 例外:DataValidation 列表的总长度不能超过 255 个字符

    我正在尝试在 epplus 中动态创建公式字段 如果公式字段包含少于 255 个字符 则可以正确创建 如果超过255 然后它抛出一个异常例外 DataValidation 列表的总长度不能超过 255 个字符 任何人都可以帮我解决这个问题吗
  • 如何有效地将项目添加到 Chrome Storage API 中的数组中?

    据我了解 如果您希望在 Chrome Storage API 中存储一个数组并不断向其中添加项目 则需要如下所示 function addToHistory url chrome storage sync get history funct
  • 使用 PHP 强制下载然后重定向

    我知道这个问题以前已经被问过很多次了 但我找不到适合我需要的答案 我需要找到一种方法来强制下载文件 然后在下载开始后重定向到 感谢下载 页面 到目前为止我有
  • 这个 ASP.Net 和 Fiddler 示例有什么问题?

    我正在使用 Visual Studio 2012 RC 我使用默认路由并具有以下 Web API 控制器 public class FooController ApiController GET api foo public IEnumer
  • Nodejs http 超时或错误时重试

    我正在尝试在超时或错误时自动重试 HTTP 请求 目前我的代码如下所示 var req http get url doStuff on error retry setTimeout 10000 retry 但是 单个请求有时可能会同时触发