# 缓存处理器
> 使用可配置的绕过逻辑缓存路由响应。
```ts [nitro.config.ts]
import { defineConfig } from "nitro";
export default defineConfig({});
```
```json [package.json]
{
"type": "module",
"scripts": {
"dev": "nitro dev",
"build": "nitro build"
},
"devDependencies": {
"nitro": "latest"
}
}
```
```ts [server.ts]
import { html } from "nitro/h3";
import { defineCachedHandler } from "nitro/cache";
export default defineCachedHandler(
async () => {
await new Promise((resolve) => setTimeout(resolve, 500));
return html`
Response generated at ${new Date().toISOString()} (took 500ms)
(skip cache)
`;
},
{ shouldBypassCache: ({ req }) => req.url.includes("skipCache=true") }
);
```
```json [tsconfig.json]
{
"extends": "nitro/tsconfig"
}
```
```ts [vite.config.ts]
import { defineConfig } from "vite";
import { nitro } from "nitro/vite";
export default defineConfig({ plugins: [nitro()] });
```
该示例演示了如何缓存一个耗时操作(500 毫秒延迟),以及如何通过查询参数有条件地绕过缓存。首次请求时,处理程序执行并缓存结果。随后的请求会立即返回缓存的响应,直到缓存过期或被绕过。
## 工作原理
```ts [server.ts]
import { html } from "nitro/h3";
import { defineCachedHandler } from "nitro/cache";
export default defineCachedHandler(
async () => {
await new Promise((resolve) => setTimeout(resolve, 500));
return html`
响应生成时间 ${new Date().toISOString()}(耗时 500ms)
(跳过缓存)
`;
},
{ shouldBypassCache: ({ req }) => req.url.includes("skipCache=true") }
);
```
处理程序通过500毫秒的延迟模拟了一个缓慢操作。由于被 `defineCachedHandler` 包裹,首次执行后响应会被缓存。`shouldBypassCache` 选项会检查 URL 中是否包含 `?skipCache=true`,存在时则跳过缓存,强制处理程序重新执行。
## 了解更多
- [缓存](/docs/cache)
- [存储](/docs/storage)