Skip to content

Cache 中间件

Cache 中间件使用 Web 标准中的 Cache API

目前该中间件支持使用自定义域名的 Cloudflare Workers 项目,以及运行在 Deno 1.26+ 的 Deno 项目,同时也可用于 Deno Deploy。

在 Cloudflare Workers 中,平台会遵循 Cache-Control 头并返回缓存的响应。详情可参阅 Cloudflare 缓存文档。Deno 不会根据头部自动刷新缓存,因此如果需要更新缓存,需要自行实现机制。

不同平台的使用方式见下文的 用法

导入

ts
import { Hono } from 'hono'
import { cache } from 'hono/cache'

用法

ts
app.get(
  '*',
  cache({
    cacheName: 'my-app',
    cacheControl: 'max-age=3600',
  })
)
ts
// 在 Deno 运行时时必须使用 `wait: true`
app.get(
  '*',
  cache({
    cacheName: 'my-app',
    cacheControl: 'max-age=3600',
    wait: true,
  })
)

选项

required cacheName:string | (c: Context) => string | Promise<string>

缓存名称,可用来区分存储在不同标识下的缓存。

optional wait:boolean

指示 Hono 是否需要等待 cache.put 返回的 Promise 解析后再继续处理请求。在 Deno 环境中必须设置为 true。默认值为 false

optional cacheControl:string

Cache-Control 头部的指令字符串。更多信息参考 MDN 文档。未提供该选项时,请求中不会自动添加 Cache-Control 头。

optional vary:string | string[]

设置响应中的 Vary 头。如果原始响应已经包含 Vary,则会合并并去重所有值。若设置为 * 则会报错。关于 Vary 头及其对缓存策略的影响,可参阅 MDN 文档

optional keyGenerator:(c: Context) => string | Promise<string>

cacheName 对应的每个请求生成键,可用于基于请求参数或上下文参数缓存数据。默认值为 c.req.url

optional cacheableStatusCodes:number[]

需要缓存的状态码数组。默认值为 [200]。可以通过该选项缓存特定状态码的响应。

ts
app.get(
  '*',
  cache({
    cacheName: 'my-app',
    cacheControl: 'max-age=3600',
    cacheableStatusCodes: [200, 404, 412],
  })
)

Released under the MIT License.