路由缓存
VextJS 提供声明式路由级响应缓存,通过路由选项的 cache 字段配置。缓存命中时跳过参数校验和 handler 执行,直接返回缓存的响应数据,显著提升热点接口性能。
基本用法
数字简写
最简配置,指定缓存秒数:
完整配置
显式禁用
配置选项
RouteOptions.cache
全局配置 (config.cache)
缓存行为
响应头
缓存 Key 算法
默认 key 格式:${method}:${path}[?sortedQuery][|varyHeaders]
- Query 参数自动排序(
?b=2&a=1≡?a=1&b=2) - 默认 key 不包含 Authorization / Cookie(安全设计)
- 需要按用户区分缓存时,使用自定义
key函数
不缓存的场景
204 No Content响应- 非 2xx 状态码(3xx / 4xx / 5xx)
cache: false显式禁用cache: 0或负值condition返回false- 自定义
key返回空字符串
运行时 API
通过 app.cache 在路由 handler 中操作缓存:
Vary Headers
不同的请求头值会生成不同的缓存条目:
条件缓存
通过 condition 函数控制是否走缓存逻辑:
自定义 Key
需要按用户身份区分缓存时:
安全注意事项
:::warning
认证路由 + 缓存:默认缓存 key 不包含用户身份信息。如果同时使用 middlewares: ['auth'] 和 cache,不同用户可能命中相同缓存,导致数据泄露。
框架在启动时会检测此场景并发出警告。解决方案:
- 使用自定义
key函数包含用户标识 - 使用
condition排除已认证请求 :::