因此,我尝试了互联网上所有可能的建议,但获取的数据仍然被缓存。我知道这一点是因为我使用的是 mongodb 服务器,我向服务器添加数据,我在服务器上看到数据,但在网站上数据是以前的(在 NextJS 项目构建之前)。构建后它没有显示数据库中的新数据,这让我认为 fetch 已被缓存。
我在下面尝试过;
export const revalidate = 0;
export const fetchCache = "force-no-store";
await fetch("/api/myApiRoute", {
cache: "no-store" // I also tried "no-cache",
});
我也在手动刷新页面并使用
router.refresh()
。尽管如此,来自 fetch 的数据仍然被缓存。
如何获取更新的数据,而不是缓存的数据?
终于,我找到了解决办法。在我看来,该文档有点误导。
在文档中,他们建议在客户端组件中使用以下内容,以实现无缓存行为
await fetch("/api/myApiRoute", {
cache: "no-store" // I also tried "no-cache",
});
但这不起作用,因为你还必须把
export const revalidate = 10;
在“/api/myApiRoute”。我再说一遍,你不要将这一行放入你的组件中,因为如果你这样做,它就不起作用。您将此行 放入 API Route.jsx 中。
之后,我就可以看到更新的数据了。
没有缓存应该起作用。您可以看到控制台显示在开发环境中获取时缓存丢失。 (否则显示命中)
伙计,你救了我的命!我一整天都在寻找这个问题的解决方案。