我在我的Next.jsv13.2应用程序中创建了一个从数据库获取数据的API端点.

app/api/someData

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

我使用的是Next.js中新的app目录,它使用Route Handlers.

任何帮助都将不胜感激.

推荐答案

是的,在app文件夹中,默认情况下,Next.js缓存所有获取的结果.如果您使用的是fetch(),则可以使用revalidatecache选项更改每个查询的此行为:

fetch('https://...', { next: { revalidate: 10 } });
fetch('https://...', { cache: 'no-store' });

您还可以通过从页面、版面或路由处理程序或revalidate中导出fetchCache来控制Route Segment Config的行为,如果您使用的是fetch():

// layout.js OR page.js OR route.js

export const fetchCache = 'force-no-store';
// OR
export const revalidate = 0;

现在,如果你不是使用fetch()来获取数据,而是像Axios或ORM这样的东西,doc会说:

作为临时解决方案,在可以配置第三方查询的缓存行为之前,您可以使用Route Segment Config来自定义整个段的缓存行为.

// layout.js OR page.js OR route.js

import prisma from './lib/prisma';
 
export const revalidate = 2; // revalidate every 2s, it can be 0 if you want no caching
 
async function getPosts() {
  const posts = await prisma.post.findMany();
  return posts;
}
 
export default async function Page() {
  const posts = await getPosts();
  // ...
}

更多信息,你可以阅读Data Fetching.

Javascript相关问答推荐

判断现代浏览器中的点击是否由touch 触发

Regex可以 Select 以任何顺序匹配组

如何使用JavaScript用等效的功能性HTML替换标记URL格式?

防止用户在selectizeInput中取消 Select 选项

我应该绑定不影响状态的函数吗?'

如何找出摆线表面上y与x相交的地方?

Rehype将hashtag呈现为URL

Regex结果包含额外的match/group,只带一个返回

如何将Cookie从服务器发送到用户浏览器

制作钢琴模拟器,并且在控制台中不会执行或显示该脚本

使用原型判断对象是否为类的实例

第二次更新文本输入字段后,Reaction崩溃

当我在Reaction中创建一个输入列表时,我的输入行为异常

元素字符串长度html

如何 for each 输入动态设置输入变更值

如何利用CSS中的隐藏元素实现平滑扩展和防止网格行间隙

当我点击一个按钮后按回车键时,如何阻止它再次被点击

如何更改Html元素S的 colored颜色 ,然后将其褪色为原始 colored颜色

与在编剧中具有动态价值的定位器交互

为什么我不能使用其同级元素调用和更新子元素?