@bbc/http-transport-cache

中文文档
6.0.1发布于 2026/10/15Apache-2.0CommonJS近 30 天下载 3218

缓存中间软件

中文使用文档
文档目录8 节
  1. 安装
  2. 使用量
  3. 特征
  4. 活动
  5. 中间软件选项
  6. 缓存版本
  7. 缓存密钥结构
  8. 测试

NPM downloads npm license github-issues stars forks

HTTP 传输缓存

HTTP 光谱兼容缓存层 http-transport。 。 。 .

安装

pnpm install --save http-transport-cache

使用量

根据最大年龄配置响应缓存 :

const cache = require('@bbc/http-transport-cache');
const Catbox = require('@hapi/catbox');
const HttpTransport = require('@bbc/http-transport');

const catbox = new Catbox.Client(new Memory());

const url = 'http://example.com/';

const client = HttpTransport.createBuilder()
      .use(cache.maxAge(catbox))
      .createClient();

      const body = await client.get(url)
        .asBody();

      console.log(body);

配置 stale- if- error :

const cache = require('@bbc/http-transport-cache');
const Catbox = require('catbox');
const HttpTransport = require('@bbc/http-transport');

const catbox = new Catbox.Client(new Memory());

const url = 'http://example.com/';

const client = HttpTransport.createClient()
      .use(cache.staleIfError(catbox))
      .createClient();

      const body = await client.get(url)
        .asBody();

      console.log(body);

倾听事件 :

const { events, maxAge } = require('@bbc/http-transport-cache');

const stats = require('@ibl/stats');
const Catbox = require('catbox');
const HttpTransport = require('@bbc/http-transport');

const catbox = new Catbox.Client(new Memory());

const url = 'http://example.com/';

const client = HttpTransport.createBuilder()
  .use(cache.maxAge(catbox, {
    name: `theservice`,
  }))
  .createClient();

events.on(`cache.theservice.read_time`, (ctx) => {
  stats.timing(`timingstat.read_time`, ctx.duration);
});

特征

特性说明
警告缓存的响应只包含简化 http-transport 请求和响应,以避免浪费缓存空间.
最大年龄答复在 max-age 指令,并在提出请求之前使用.
如果出错, 设置为了确保即使在出错时也能提供弹性服务,http响应可以包括: cache-control 调用指令 stale-if-error 也就是说,当服务出错时, 我们可以使用缓存回复。 要做到这一点, 单独保存一个响应blob, 用于 stale 期间, 在错误时, 这个响应会与保存在其中任何高端的正体一起使用 max-age 或者说 stale-if-error。 。 。 .
无存储若为 no-store 指令在响应中存在, 它不会在任何地方被存储 / 缓存 .
私营若为 private 指令存在于响应中, 它不会被共享缓存存储 。 该响应将只存储在专供单一用户使用的私人缓存中.

活动

  • 击出
  • 错过
  • 错误
  • 超时
  • 暂停
  • 读取时间( t)
  • 写入时间( t)
  • 连接错误

中间软件选项

两者 maxage 财务报告和审定财务报表 staleIfError 接受选项对象.

财产类型模块说明
ignoreCacheErrors布尔最大年龄, 如果错误 cache.maxAge 当此属性为 true设置此属性为 cache.staleIfError 将重新删除原始错误( 不是缓存查找错误 ). ignoreCacheErrors 实值 false 默认.
timeout整数最大年龄在指定数 ms 后暂停缓存搜索 。 默认情况下, 不指定超时 .
connectionTimeout整数最大年龄, 如果错误 取消在指定数 ms后连接缓存的尝试 。 默认情况下, 不指定超时 .
includeCacheStatusInCtx布尔最大年龄, 如果错误 现时a cacheStatus 阵列 - 记录所有缓存事件, 将设置在 context 用于其他插件. includeCacheStatusInCtx 实值 false 默认.

缓存版本

缓存阴道存储于 config.json中,这不同于 package.json。缓存版本用于缓存密钥中,旨在减少缓存破碎现象,即该库的多个不同版本可能用于单个产业.

缓存版本 必须 如果对存储在缓存中的数据作出与现有版本不相容的修改,则会递增。 否则不应改变.

缓存密钥结构

缓存使用 catbox 以提供一个简单的可插接接口,它支持将缓存和ID分割开来,因此使用下列部分:

  • http-transport:{version}: reswer -- -- 缓存通话的基本响应 max-age 仅在响应的 URL 上显示值键.
  • http- transport:{version}:staleResponse - 调用缓存的 Stale响应 stale-if-error 值仅在响应的 URL 上键入.

此外,缓存密钥可以通过通过一个 varyOn 选项. varyOn 应当包含一系列请求头名称,缓存中应另作改动;对于一些用例,向同一端点提出的请求,但对某些信头有不同值的请求,会引发不同的响应,因此不能共享相同的缓存响应,例如.accept-language通过让 http-transport-cache 将会构建一个特殊的缓存密钥, 其中也将包含上述信头及其值 .

示例

我们做一个 GET 请求访问以下 URL : www.example.com/some-cacheable-path。 。 。 .

我们不同了 accept-language 财务报告和审定财务报表 accept。这些信头将存在于请求中。 我们过去 varyOn (各种请求头,我们不同)与其他选项一起配置插件.

const opts = {
  timeout: 2000,
  varyOn: [
    'accept-language',
    'accept'
  ]
};

在第一个请求中 accept-language 实值 en 财务报告和审定财务报表 accept 实值 application/json。由此产生的关键是:

  • 获取:www.example.com/some-cacheble-path:accept-language=en,accept=应用/json

在第二项请求中 accept-language 实值 fr 财务报告和审定财务报表 accept 实值 text/html。由此产生的关键是:

  • 获取:www.example.com/some-cacheable-path:accept-language=fr,accept=text/html 页面存档备份,存于互联网档案馆

这样可以避免商店中的数据误读过度.

测试

pnpm test

为生成测试覆盖报告:

pnpm run coverage

版本与发布记录

@bbc/http-transport-cache 共发布 61 个版本,首次发布于 2017/09/05;过去 12 个月发布了 2 个版本。

版本发布日期距今
6.0.1latest2026/10/1523 天前
6.0.02026/10/1523 天前
5.0.02024/12/061.9 年前
4.4.02024/10/152 年前
4.3.12024/02/092 年前
4.3.02023/11/202 年前

其他发布通道:beta-swr → 1.3.8。

关于 @bbc/http-transport-cache 的常见问题

@bbc/http-transport-cache 是什么?

缓存中间软件

如何安装 @bbc/http-transport-cache?

在项目目录运行 npm install @bbc/http-transport-cache,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@bbc/http-transport(^5.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@bbc/http-transport-cache 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/bbc__http-transport-cache 是否存在。

@bbc/http-transport-cache 支持 ESM 还是 CommonJS?

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

@bbc/http-transport-cache 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=24。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@bbc/http-transport-cache 可以商用吗?

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

@bbc/http-transport-cache 的下载量有多少?

根据 npm 官方下载统计,@bbc/http-transport-cache 在 2026/10/08 – 2026/11/06 这 30 天内被下载 3,218 次,日均约 107 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bbc/http-transport-cache 还在维护吗?

最新版本 6.0.1 发布于 2026/10/15(23 天前);至今共发布 61 个版本,其中过去 12 个月发布了 2 个;首次发布于 2017/09/05。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。