部署项目后,数据不会更新(始终获得相同的结果)

Data is not being updated (always getting the same result) after the project is deployed

提问人:lool 提问时间:5/9/2023 最后编辑:Youssouf Oumarlool 更新时间:11/17/2023 访问量:7762

问:

我在 Next.js 应用程序中创建了一个 api 端点,用于从数据库获取数据。v13.2

app/api/someData

在我将其部署到 Vercel 之前,这一直运行良好。我认为问题在于路由正在被缓存,因此每次都返回相同的响应。如何阻止这种情况发生?

我正在使用 Next.js 中使用路由处理程序的新目录。app

任何帮助将不胜感激。

JavaScript ReactJS 缓存 Next.js Vercel

评论


答:

14赞 Youssouf Oumar 5/9/2023 #1

这是因为在应用程序目录和生产环境中,Next.js 默认将所有获取的数据缓存在 API 路由和服务器组件中。如果您使用的是 fetch(),则可以使用 或 选项更改每个查询的此行为:revalidatecache

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";