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

如何让Next.js App Router的API路由表现得像Pages Router

解决Next.js App Router API路由与RSC每次请求执行的问题

一、API路由实现每次请求执行

App Router的API路由默认会被静态优化,构建后返回固定内容。要和Pages Router一样每次请求都运行服务器代码,只需显式开启动态渲染,有两种方式:

  • 方式1:添加dynamic = 'force-dynamic'指令
    在你的app/api/route1.ts顶部加入以下代码,强制路由每次请求都在服务器端执行:
export const dynamic = 'force-dynamic';

export async function GET() {
  return new Response(JSON.stringify({ time: new Date().toISOString() }), {
    headers: { 'Content-Type': 'application/json' },
  });
}
  • 方式2:设置revalidate = 0
    也可以通过禁用缓存来实现,效果和上面一致:
export const revalidate = 0;

export async function GET() {
  return new Response(JSON.stringify({ time: new Date().toISOString() }), {
    headers: { 'Content-Type': 'application/json' },
  });
}

二、RSC实现每次请求执行

React Server Components默认同样是静态生成的,要让组件每次请求都重新执行服务器端逻辑,同样需要声明动态行为:

  • 在组件文件顶部添加动态指令
    比如你的服务器组件文件:
export const dynamic = 'force-dynamic';

export default async function MyServerComponent() {
  const currentTime = new Date().toISOString();
  return <div>当前请求时间:{currentTime}</div>;
}
  • 或者使用revalidate = 0替代dynamic = 'force-dynamic',同样能让组件每次请求都重新渲染。

补充说明

Next.js App Router的默认策略是尽可能做静态优化以提升性能,因此需要显式声明动态行为来覆盖默认逻辑。force-dynamic和revalidate=0都能将路由/组件标记为动态资源,确保每次请求都会在服务器端执行对应的代码逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 18:42:10