nextjs 13:在无服务器函数中禁用缓存

ajsxfq5m  于 2023-11-18  发布在  其他
关注(0)|答案(3)|浏览(147)

我有一个使用nextjs 13和应用路由器的nextjs应用。一个端点返回一个randomInt:

import { randomInt } from "crypto";
import { NextResponse } from "next/server";

export async function GET() {
  return NextResponse.json({ revenue: randomInt(100) });
}

字符串
在local中,每次我加载这个端点时,我都会得到一个不同的数字。但是在vercel上的prod中,我总是得到相同的数字,就像它被缓存了一样。我如何禁用它?

xeufq47z

xeufq47z1#

如果问题确实出在该高速缓存上,你可以尝试使用fetch函数参数。类似于:

fetch("[path]", {
 method: "GET",
 cache: "no-store",
})

字符串
还有一些其他的参数和选项可以查找,只要在他们的网站上或在“RequestInit”接口中查找即可。参考:https://nextjs.org/docs/app/api-reference/functions/fetch

nwo49xxi

nwo49xxi2#

我也试过禁用他们文档中提到的该高速缓存,但是没有用
1.基于时间的再验证:

const data:Response = await fetch(`/api/gettasks?_cache=${Date.now()}`, {next: {revalidate: 10}});

字符串
1.按需再验证:

const data:Response = await fetch(`/api/gettasks?_cache=${Date.now()}`, {next: { tags: ['blog']}});


1.在服务器(API/gettasks/route.ts)上,我尝试使用revalidateTag方法禁用该高速缓存。

export async function GET(request: NextRequest, response: NextResponse) {

let data = await getTasks();
revalidateTag('blog');
return NextResponse.json({revalidated: true, body: data});
  }


1.但是请求仍然具有相同的x-Vercel-Cache: HIT而不是x-Vercel-Cache: MISS
1.类似的问题已经向他们报告,目前处于开放状态已有一年多。
https://github.com/vercel/next.js/issues/42112

qlfbtfca

qlfbtfca3#

当打开API端点时,如https://mysite.vercel.app/api/GetData显示相同的数据,即使数据应该得到更新,您可以在API路由文件的末尾添加以下行。

export const dynamic = "force-dynamic";

字符串

相关问题