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

Next.js 14 + Prisma部署后findMany无法获取更新数据问题

问题分析与解决

核心原因

Next.js 14的App Router对无动态参数的GET API路由默认启用了静态数据缓存,部署时会预渲染该接口的响应并缓存,后续请求直接返回缓存内容,不会重新查询数据库。而带动态参数的api/campaigns/username/[...username]因为包含路由参数,默认被标记为动态路由,每次请求都会执行查询,所以能获取最新数据。

解决方案

针对api/campaigns路由,可通过以下方式禁用缓存或配置自动刷新:

1. 添加revalidate配置(推荐)

在API路由文件顶部添加export const revalidate,指定缓存刷新间隔(单位:秒),比如设置为10秒自动刷新一次:

import { NextResponse } from "next/server";
import prisma from "@/prisma/client";

// 每10秒刷新一次缓存
export const revalidate = 10;

export async function GET() {
  try {
    const featuredCampaigns = await prisma?.campaign.findMany({
      orderBy: {
        createdAt: "desc",
      },
      where: {
        fundingComplete: false,
      },
      include: {
        CampaignComment: {
          include: {
            user: {
              select: {
                username: true,
              },
            },
          },
        },
      },
    });
    if (featuredCampaigns.length === 0) {
      return NextResponse.json(
        { error: "No campaigns found" },
        { status: 404 }
      );
    }
    return NextResponse.json({ campaigns: featuredCampaigns }, { status: 200 });
  } catch (error) {
    return NextResponse.json({ error: `Error: ${error}` }, { status: 500 });
  }
}

2. 强制路由为完全动态

如果需要每次请求都实时查询数据库,可添加export const dynamic = 'force-dynamic',彻底禁用静态缓存:

import { NextResponse } from "next/server";
import prisma from "@/prisma/client";

// 强制每次请求都执行查询,不缓存
export const dynamic = 'force-dynamic';

export async function GET() {
  // 原查询逻辑不变
}

3. 手动设置响应头禁用缓存

在返回响应时添加缓存控制头,告诉客户端和CDN不要缓存:

return NextResponse.json(
  { campaigns: featuredCampaigns },
  { 
    status: 200,
    headers: {
      'Cache-Control': 'no-store, max-age=0'
    }
  }
);

为什么带用户名的接口正常?

api/campaigns/username/[...username]包含动态路由参数username,Next.js会自动将这类路由视为动态路由,默认不会预渲染缓存,每次请求都会执行服务器端的查询逻辑,因此能获取数据库的最新数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:27:50