You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Hono Web应用中初始化上下文变量ttlCache

在Hono中初始化上下文变量ttlCache的正确方式

你可以通过全局中间件在应用启动时初始化TTLCache实例,并挂载到Hono的上下文变量中,确保所有路由都能访问到这个缓存。

完整实现代码

import { serve } from "@hono/node-server"
import { Hono } from "hono"
import TTLCache from "@isaacs/ttlcache"

// 提前初始化单实例缓存
const ttlCache = new TTLCache({ max: 10000, ttl: 1000 })

const app = new Hono<{ Variables: { ttlCache: TTLCache<string, string> } }>()

// 全局中间件:将缓存挂载到上下文变量
app.use("*", (c, next) => {
  c.var.ttlCache = ttlCache
  return next()
})

// 路由中正常使用缓存
app.get("/", (c) => {
  // 示例操作:存值到缓存
  c.var.ttlCache.set("demo", "hello hono cache")
  return c.text(`TTLCache实例已就绪:${typeof c.var.ttlCache}`)
})

serve(app, (info) => {
  console.log(`Listening on http://localhost:${info.port}`)
})

问题原因

之前的代码仅通过TypeScript泛型声明了ttlCache的变量类型,但没有实际创建实例并赋值到上下文c.var中,所以访问时返回undefined。Hono不会自动根据类型生成实例,必须手动完成初始化和挂载。

补充说明

  • 上述方式创建的缓存是单实例,所有请求共享同一份缓存,适合绝大多数业务场景
  • 若特殊场景需要每个请求独立缓存(极少用到),可在中间件内部初始化TTLCache,但会失去缓存共享的作用

内容的提问来源于stack exchange,提问作者Georg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:57:07