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

部署Vercel后Next.js站点MongoDB数据前端不更新问题排查

问题分析与解决方案

核心原因:Vercel对Next.js App Router API路由的默认静态缓存

你遇到的问题本质是Vercel部署后,App Router的API路由被默认做了静态缓存处理,导致前端请求到的始终是部署时的旧数据快照——即便数据库已经更新,API返回的还是缓存的旧内容。

具体修复步骤

1. 修正API路由的缓存策略与响应设置

修改/api/project/route.ts,添加禁用缓存的响应头,同时修正错误的状态码与catch逻辑:

export const GET = async (req) => {
  try {
    await connectToDB();
    const projects = await Projects.find({}).populate("_id");
    // GET请求成功返回200状态码(201是创建资源的POST请求规范),同时添加禁用缓存的头
    return new Response(JSON.stringify(projects), { 
      status: 200,
      headers: {
        'Cache-Control': 'no-store, no-cache, must-revalidate, proxy-revalidate',
        'Pragma': 'no-cache',
        'Expires': '0',
      }
    });
  } catch (error) {
    // 必须return错误响应,否则会返回undefined导致前端报错
    return new Response("Failed to fetch Projects", { status: 500 });
  }
};

2. 可选:强制API路由动态渲染

在API路由文件顶部添加dynamic配置,强制Vercel每次请求都重新执行路由逻辑,彻底避免静态缓存:

// 文件最顶部添加
export const dynamic = 'force-dynamic';

export const GET = async (req) => {
  // 原逻辑...
};

3. 前端请求的补充优化

虽然你已经设置了cache: "no-cache",可以改用更严格的配置确保前端不缓存响应:

const res = await fetch("/api/project", {
  cache: "no-store",
  headers: {
    "Cache-Control": "no-store",
  },
});

内容的提问来源于stack exchange,提问作者ali fares

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:57:30