如何在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
相关产品推荐
相关产品推荐

