主题
缓存行为
顶层设置默认 revalidate(ISR)
ts
// app/api/posts/route.js
export const revalidate = 60 // 默认页面/响应可在 60s 后再生成
export async function GET() {
const data = await getPosts()
return NextResponse.json(data) // 会使用顶层 revalidate 作为默认
}在单次响应中覆盖(按响应控制)
ts
// app/api/posts/route.js
export async function GET(req) {
const id = new URL(req.url).searchParams.get('preview')
if (id) {
// 预览或私有请求,不缓存
return NextResponse.json({ preview: true }, { cache: 'no-store' })
}
// 公开请求,显式设定 30s 缓存(覆盖顶层的 60s)
return NextResponse.json({ posts: [] }, { next: { revalidate: 30 } })
}强制动态(顶层会阻止缓存)
ts
// app/api/private/route.js
export const dynamic = 'force-dynamic' // 强制每次请求都执行服务器逻辑
export async function GET() {
// 即使你在这里尝试返回带缓存的 Response,路由被标记 force-dynamic 后其行为会以动态为主
return NextResponse.json({ now: Date.now() }, { cache: 'no-store' })
}