next.js 无法绕过GET请求的Vercel边缘缓存

lrpiutwd  于 2023-06-29  发布在  其他
关注(0)|答案(1)|浏览(102)

我正在使用NextJS(13.4.6)中的新应用路由器。我有一个GET /battles端点。在内部,此端点查询数据库并随机返回2个实体。每次调用API时,应用程序都需要2个不同的实体。
当地一切正常。
当部署到Vercel时,GET请求似乎会被缓存,并且总是返回相同的2个实体。我的路由逻辑在第一次调用后不会被执行。
看看标题,我看到:X-Vercel-Cache: HIT。从Vercel文档中,有一些条件,其中缓存的结果将从Vercel边缘网络返回(https://vercel.com/docs/concepts/edge-network/caching#cacheable-response-criteria)。特别是:

  • Response does not contain the private, no-cache or no-store directives in the Cache-Control header.

我尝试通过执行以下操作来绕过该高速缓存:

  • 'cache-control': 'private, s-maxage=0, no-store',添加到我的路由响应。
  • export const dynamic = 'force-dynamic';添加到我的Page组件。
  • cache: 'no-store',添加到我的客户端获取请求。

所有这些似乎都不起作用,我没有办法了。一个简单的解决方法是改为POST请求(这解决了这个问题),但这并不理想。

qnakjoqk

qnakjoqk1#

读取路由段配置
“路由段”选项允许您通过直接导出以下变量来配置页面、布局或路由处理程序的行为:
//复制粘贴没有粘贴成表格格式x1c 0d1x
我觉得你需要

// default false
  export const revalidate=0 // or low number

相关问题