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

Next.js中Route Handler的force-dynamic是否会清除数据缓存?

回答

在Next.js的Route Handler场景下,是否需要同时禁用全路由缓存和数据缓存,取决于你的实际业务需求:

1. 先搞清楚两个缓存的核心差异

  • 全路由缓存:缓存的是Route Handler最终返回给客户端的响应结果。设置export const dynamic = "force-dynamic"后,每次请求都会重新执行Handler里的代码逻辑,不会复用之前缓存好的响应内容。
  • 数据缓存:缓存的是fetch请求拉取到的原始数据。哪怕全路由缓存被禁用,fetch默认还是会缓存数据,除非你显式配置关闭。

2. 两种常见场景的处理方式

场景一:需要每次请求都获取完全实时的数据

这种情况必须同时禁用两者:

  • 保留export const dynamic = "force-dynamic";,确保Handler每次请求都重新执行
  • 在fetch请求里添加配置,直接关闭数据缓存:
    const response = await fetch('你的目标API地址', {
      cache: "no-store" // 也可以用`next: { revalidate: 0 }`,两者效果一致
    });
    

场景二:需要Handler逻辑每次执行,但允许fetch数据短暂缓存

这种情况只需要禁用全路由缓存即可,同时可以给fetch设置缓存过期时间:

export const dynamic = "force-dynamic";

export async function GET(_: Request, { params }: { params: { id: string } }) {
  try {
    const response = await fetch('你的目标API地址', {
      next: { revalidate: 60 } // 数据缓存60秒后自动失效,按需调整时长
    });
    // 后续业务逻辑...
  } catch (error) {
    // 错误处理逻辑...
  }
}

总结

如果业务要求每次请求都必须拿到最新的实时数据,就要同时禁用全路由缓存和数据缓存;如果只是需要Handler的逻辑每次都执行,但数据可以短暂缓存以优化性能,只需要禁用全路由缓存,再按需配置fetch的缓存策略就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:34:59