我正在用NextJS 13构建一个NextJS应用程序。我不想在应用程序中有任何缓存,因为我总是想确保有最新的数据。
Stack: NextJS 13, Prisma ORM, NeonDB
我的page.tsx
文件包含以下内容以确保没有应用缓存:
export const revalidate = 0
export const dynamic = 'force-dynamic'
我的所有端点都有以下选项:
{
cache: 'no-store',
}
但是,当我更新数据时,我使用
const toggleEndpoint = (isCollected: boolean) => async () => {
await fetch('/api/expenses/recurrents', {
method: 'PUT',
body: JSON.stringify({
type: 'toggleCollected',
isCollected,
}),
})
router.refresh()
}
最后,我也尝试更新我的vercel.json
文件:
"headers": [
{
"source": "/(.*)",
"headers": [
{
"key": "Cache-Control",
"value": "no-cache, no-store, must-revalidate"
},
{
"key": "Pragma",
"value": "no-cache"
},
{
"key": "Expires",
"value": "0"
}
]
}
]
但是似乎什么都没有发生,我仍然有旧的数据显示,当我检查数据库时,我有更新的数据。有谁知道我可以试试什么吗?
编辑:我找到了一个解决方案,通过将request
参数添加到我的GET端点并使用它,它似乎有效地调用端点并返回最新数据。
export async function GET(request: Request) {
console.log(request.url)
const amountLeft = await prisma.amountOnAccount.findFirst({
where: {
userId: {
equals: process.env.USER_ID,
},
},
})
return NextResponse.json(amountLeft ? amountLeft.amount : 0)
}
很高兴你自己想出来了,
也可以使用
revalidatePath(request.url)
在API
中返回响应之前