NextJS/Vercel缓存简单获取请求

jc3wubiy  于 2023-06-22  发布在  其他
关注(0)|答案(1)|浏览(141)

我已经在Vercel上部署了一个NextJS(13.2.4)应用程序,它在本地工作得很好。我正在从一个组件发出一个简单的获取请求('use client')。
该请求指向/app目录中的一个路由,其中有一个对第三方服务的API调用。
正如我上面提到的,它在本地工作正常,但在Vercel上不行。当我在部署的应用程序上发出获取请求时,它第一次正常工作,但它缓存了响应,并且再也没有获得新的数据。
它似乎在刷新数据并进行网络调用,但它的速度超级快,数据根本不会改变(它应该)。
我试过添加cache: “no-store”到获取请求,但没有运气。
谢谢你的帮助,如果需要更多的信息,我很乐意提供。

tzdcorbm

tzdcorbm1#

我一整天都在用头撞这个。Vercel上的Next13一直在缓存我的google api调用。
我找到的最好的答案是Youssouf Oumar的这个:
How to avoid caching in the app directory of Next.js?
以下是文档中特定部分的链接:
正在重新验证静态数据
在生产环境中,Next13似乎将大多数fetch调用缓存在app文件夹中(尽管我有两个对Hubspot的调用没有缓存)。如果你在route.js函数中做一个普通的提取,你应该能够添加"{cache:"no-store "}"添加到页中的提取中以防止缓存。

const response = await fetch('/agents', { cache: 'no-store' });

然而,这对我不起作用,因为我使用的是google api sdk。
最终对我有用的是将revalidate变量导出为route.js文件中的0。

// app/agents/route.js
import { NextResponse } from 'next/server'
import getAgentInfo from '../../lib/google-sheets/getAgentInfo.js';

export async function GET() {
  const agents = await getAgentInfo();
 
  return NextResponse.json({ agents })
}

export const revalidate = 0;

这修复了页面中的缓存,我在那里获取了这个,现在我正在获取当前数据(谢天谢地)。
我希望这对你有帮助!

相关问题