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

Next.js 13集成Prisma:生产环境数据库条目无法更新

解决Next.js 13生产环境API数据不实时更新的缓存问题

你的问题核心是Next.js 13生产环境下API路由被静态缓存,导致数据库更新后接口返回旧数据,仅重新部署才会刷新。以下是具体解决步骤:

1. 强制API路由动态执行,禁用静态缓存

Next.js 13的App Router中,GET类型API路由默认会被静态优化(构建时预渲染并缓存结果)。要让API每次请求都实时查询数据库,需在API文件顶部添加动态配置:

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

// 关键配置:禁用静态缓存,强制每次请求都运行服务器端代码
export const dynamic = 'force-dynamic';

export async function GET() {
  try {
    const guestbookEntries = await prisma.entries.findMany();
    return Response.json(guestbookEntries);
  } catch (error) {
    return Response.json({
      error: 'Error getting guestbook entries',
    });
  }
}

dynamic: 'force-dynamic'会将该API路由标记为服务器端动态路由,每次请求都会重新执行查询逻辑,不再复用构建时的缓存数据。

2. 调整前端fetch的缓存策略

前端请求时需确保不使用浏览器或Next.js的缓存,将cache: 'force-cache'改为cache: 'no-store':

const getGuestbookEntries = async () => {
  try {
    const response = await fetch('/api/getGuestbookEntries', {
      cache: 'no-store', // 强制不缓存,每次请求最新数据
    });
    const entries = await response.json();
    setData(entries);
  } catch (err) {
    setErrorMessage('Error on fetching');
    setSeverity('error');
    setIsVisible(true);
  }
};

no-store会告知浏览器和Next.js缓存层,不要存储该请求的任何响应数据,每次都发起全新请求到服务器。

3. 额外检查(可选)

默认情况下Prisma不会缓存查询结果,若之前自定义过Prisma缓存配置,可在查询时显式禁用:

const guestbookEntries = await prisma.entries.findMany({
  cacheStrategy: { ttl: 0 } // 禁用Prisma查询缓存
});

完成以上修改后,生产环境新增数据库条目后,刷新页面或重新调用getGuestbookEntries即可看到最新数据,无需等待部署。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 17:05:13