@adobe/node-fetch-retry

中文文档
2.2.0发布于 2022/03/08Apache-2.0TypeScriptCommonJS近 30 天下载 3.9万

执行 HTTP 请求重试的库

中文使用文档
文档目录10 节
  1. 安装
  2. 使用量
  3. 默认行为
  4. 可选自定义参数
  5. 自定义参数示例
  6. 禁用重试
  7. 关于重试期限的补充说明
  8. Apache OpenWhisk 动作支持
  9. 捐款
  10. 许可证发放

Version License Travis

节点重复

为 HTTP 请求执行重试的节点模块 .

它是一个包裹周围 node-fetch 图书馆。 它有如下所描述的默认重试逻辑以及可配置参数. 它还对Apache OpenWhisk动作进行了内置支持,调整了超时以反映动作超时.

安装

npm install @adobe/node-fetch-retry

使用量

这个图书馆的工作和正常一样 fetch api,但带有一些新增的功能.

默认行为

不配置任何参数,重试行为如下:

const fetch = require('@adobe/node-fetch-retry');

async main() {
    const response = await fetch(url);
}

此示例只使用自定义头并会使用默认的重试设置 :

const fetch = require('@adobe/node-fetch-retry');

async main() {
    const response = await fetch(url, {
        headers: {
            'custom-header': '<<put custom header value here>>'
        }
    });
}

可选自定义参数

所有重试选项可配置并可以设置在 retryOptions 输入 options 对象传递到 fetch。 。 。 .

参数格式说明环境变量默认值
retryMaxDuration数目重试时间以毫秒为单位,直到出现错误NODE_FETCH_RETRY_MAX_RETRY60 000毫秒(
retryInitialDelay数目在复试之间等待的时间( 毫秒)NODE_FETCH_RETRY_INITIAL_WAIT100分钟
retryBackoff数目复试之间等待时间的后退因子NODE_FETCH_RETRY_BACKOFF2.0 数据
retryOnHttpResponse函数(单位:千美元) 函数 确定是否重试 HTTP 响应。 能够同步无在所有 5xx 错误上重试
retryOnHttpError函数(单位:千美元) 函数 以 HTTP 出错例外来决定是否重试 。 能够同步无全部重试 FetchError类型 system
socketTimeout数目以毫秒计,直到套接字超时. 说明: socketTimeout 这是 qq retryMaxDuration,它会自动调整套接字超时, 以精确的半数 retryMaxDuration。要禁用此特性,请参见 forceSocketTimeout 下级NODE_FETCH_RETRY_SOCKET_TIMEOUT30 000 毫秒(
forceSocketTimeout布尔如果为真, 套接字超时将被迫使用 socketTimeout 所申报的财产,不论 retryMaxDuration。 。 。 . 注:这一功能旨在帮助单位测试,无意在实践中使用NODE_FETCH_RETRY_FORCE_TIMEOUT虚假

注:如果未设置相应的参数,则环境变量将超过默认值。 这些设备旨在帮助单位测试。 通过参数仍然会覆盖环境变量

自定义参数示例

此示例减少了 retryMaxDuration 并让重试延迟一个静态500ms。 这样只能重复4次了.

const fetch = require('@adobe/node-fetch-retry');

async main() {
    const response = await fetch(url, {
        retryOptions: {
            retryMaxDuration: 2000,  // 30s retry max duration
            retryInitialDelay: 500,
            retryBackoff: 1.0 // no backoff
        }
    });
}

此示例显示如何配置对 HTTP 特定响应的重试 :

const fetch = require('@adobe/node-fetch-retry');

async main() {
    const response = await fetch(url, {
        retryOptions: {
            retryOnHttpResponse: function (response) {
                if ( (response.status >= 500) || response.status >= 400) { // retry on all 5xx and all 4xx errors
                    return true;
                }
            }
        }
    });
}

此示例使用自定义 socketTimeout 值 :

const fetch = require('@adobe/node-fetch-retry');

async main() {
    const response = await fetch(url, {
        retryOptions: {
            retryMaxDuration: 300000, // 5min retry duration
            socketTimeout: 60000, //  60s socket timeout
        }
    });
}

此示例使用自定义 socketTimeout 值和自定义标题 :

const fetch = require('@adobe/node-fetch-retry');

async main() {
    const response = await fetch(url, {
        retryOptions: {
            retryMaxDuration: 300000, // 5min retry duration
            socketTimeout: 60000, //  60s socket timeout
        },
        headers: {
            'custom-header': '<<put custom header value here>>'
        }
    });
}

此示例显示如何重试所有 HTTP 错误作为例外 :

const fetch = require('@adobe/node-fetch-retry');

async main() {
    const response = await fetch(url, {
        retryOptions: {
            retryOnHttpError: function (error) {
                return true;
            }
        }
    });
}

禁用重试

您可以通过设置来禁用所有重试行为 retryOptions 改为 false。 。 。 .

const fetch = require('@adobe/node-fetch-retry');

async main() {
    const response = await fetch(url, {
        retryOptions: false
    });
}

无法重试行为不会阻止使用设置在 options 对象.

关于重试期限的补充说明

如果抓取失败, 重试逻辑将决定下次尝试要等待多久 。 如果剩余时间将超过重试MaxDuration所允许的总时间,那么将不会再次尝试. 在测试代码中,有这样操作的例子.

Apache OpenWhisk 动作支持

如果您在 OpenWhisk 动作中运行此选项, 它会在设定动作超时时时考虑此选项 retryMaxDuration它使用 __OW_ACTION_DEADLINE 用于确定是否有动作运行的环境变量.

行为: 若为 retryMaxDuration 大于动作暂停前的时间,它将调整 retryMaxDuration 与行动暂停的时间相等.

捐款

欢迎捐款! 读取 贡献指南 更多信息.

许可证发放

这个项目根据Apache V2许可证获得许可. 见 自由主义 更多信息.

版本与发布记录

@adobe/node-fetch-retry 共发布 12 个版本,首次发布于 2020/04/24;过去 12 个月发布了 0 个版本。

版本发布日期距今
2.2.0latest2022/03/084 年前
2.1.32022/02/124 年前
2.1.22022/02/084 年前
2.1.12022/02/014 年前
2.1.02022/01/254 年前
2.0.02021/10/275 年前

关于 @adobe/node-fetch-retry 的常见问题

@adobe/node-fetch-retry 是什么?

执行 HTTP 请求重试的库

如何安装 @adobe/node-fetch-retry?

在项目目录运行 npm install @adobe/node-fetch-retry,或使用 pnpm add / yarn add / bun add。

@adobe/node-fetch-retry 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@adobe/node-fetch-retry 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@adobe/node-fetch-retry 可以商用吗?

@adobe/node-fetch-retry 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@adobe/node-fetch-retry 的下载量有多少?

根据 npm 官方下载统计,@adobe/node-fetch-retry 在 2026/10/05 – 2026/11/03 这 30 天内被下载 38,979 次,日均约 1,299 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@adobe/node-fetch-retry 还在维护吗?

最新版本 2.2.0 发布于 2022/03/08(4 年前);至今共发布 12 个版本,其中过去 12 个月发布了 0 个;首次发布于 2020/04/24。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。