提问人:lool 提问时间:5/9/2023 最后编辑:Youssouf Oumarlool 更新时间:11/17/2023 访问量:7762
部署项目后,数据不会更新(始终获得相同的结果)
Data is not being updated (always getting the same result) after the project is deployed
问:
我在 Next.js 应用程序中创建了一个 api 端点,用于从数据库获取数据。v13.2
app/api/someData
在我将其部署到 Vercel 之前,这一直运行良好。我认为问题在于路由正在被缓存,因此每次都返回相同的响应。如何阻止这种情况发生?
我正在使用 Next.js 中使用路由处理程序的新目录。app
任何帮助将不胜感激。
答:
14赞
Youssouf Oumar
5/9/2023
#1
这是因为在应用程序
目录和生产环境中,Next.js 默认将所有获取的数据缓存在 API 路由和服务器组件中。如果您使用的是 fetch(),
则可以使用 或 选项更改每个查询的此行为:revalidate
cache
fetch('https://...', { next: { revalidate: 10 } });
// OR
fetch('https://...', { cache: 'no-store' });
如果您使用的是 fetch()
但想设置每个路由段的缓存,或者您正在使用其他库,例如 ,或者使用 ORM 直接与数据库通信,则可以使用路由段配置:axios
// layout.js OR page.js OR route.js 👈🏽
import prisma from "./lib/prisma";
/*
Bleow option is when you want no caching at all, there are more options
on the doc depending on your needs.
*/
export const dynamic = "force-dynamic";
async function getPosts() {
const posts = await prisma.post.findMany();
return posts;
}
export default async function Page() {
const posts = await getPosts();
// ...
}
0赞
Bibek Oli
11/1/2023
#2
如果直接使用 url 打开 API 路由时获取相同的数据,则可以在 api/xx/route.js 的末尾放置以下设置以跳过缓存并重新验证数据。
export const dynamic = "force-dynamic";
评论