You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署在Vercel的Next.js CRUD应用无法更新内容求助

问题分析与解决方案

1. 优先排查Next.js的Vercel缓存策略

Vercel对静态生成(SSG)或增量静态再生(ISR)页面会做默认缓存,这是部署后内容不更新的最常见原因:

  • 如果你用getStaticProps,必须配置revalidate参数开启ISR,让页面定期拉取最新数据并重新生成:
export async function getStaticProps() {
  const data = await client.get({ endpoint: 'your-content' });
  return {
    props: { data },
    revalidate: 30, // 每30秒触发一次数据更新
  };
}
  • 若用getServerSideProps,虽然默认每次请求都拉新,但Vercel边缘节点可能缓存响应,需手动设置缓存控制头禁用缓存:
export async function getServerSideProps(context) {
  const data = await client.get({ endpoint: 'your-content' });
  context.res.setHeader(
    'Cache-Control',
    'no-store, no-cache, must-revalidate, proxy-revalidate'
  );
  return { props: { data } };
}

2. 确认microCMS的API缓存配置

microCMS自身的API缓存也可能导致数据不更新:

  • 登录microCMS后台,找到对应内容模型的API设置,把Cache TTL调短(测试阶段可设为0),避免API返回缓存数据。
  • 请求microCMS时,强制添加缓存禁用头:
const content = await client.get({
  endpoint: 'your-content',
  headers: {
    'Cache-Control': 'no-cache, no-store, must-revalidate'
  }
});

3. 处理客户端缓存问题

浏览器可能缓存旧的API响应或页面状态:

  • 更新操作成功后,不要只更新本地状态,要重新调用数据获取函数,拉取最新内容。
  • 客户端请求时,添加随机时间戳参数绕过浏览器缓存:
const latestData = await fetch(`/api/get-content?ts=${Date.now()}`).then(res => res.json());

4. 检查更新接口的执行逻辑

确保pages/update.js里的更新操作真的生效:

  • 去Vercel控制台的Functions日志里,查看更新接口的请求记录,确认返回200且无报错,内容ID、更新字段等参数都正确传递。
  • 更新完成跳转回列表页时,用shallow: false强制页面重新获取数据:
import { useRouter } from 'next/router';

const router = useRouter();
// 更新成功后跳转
router.push('/', undefined, { shallow: false });

5. 手动清除Vercel缓存

如果以上操作都没效果,直接手动清缓存:

  • 登录Vercel项目控制台,进入Deployments页面,选择最新部署记录,点击Purge Cache按钮,然后重新部署一次。

内容的提问来源于stack exchange,提问作者Noriaki Takamizawa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 17:37:18