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

NextJS调用Express接口丢失categoryImg字段及noStore作用解惑

问题原因分析
  • Next.js App Router 对数据请求默认启用静态缓存机制:所有在 Server Component 或数据获取函数中发起的请求,首次响应结果会被持久化缓存(构建阶段或首次访问时生成),后续相同请求直接复用缓存数据,不会再调用后端接口。
  • 若你的 Express 接口曾返回过不含categoryImg的响应,或是 Next.js 缓存时捕获到了不完整的响应,即便后续接口已返回完整数据,Next.js 仍会复用旧缓存,导致你看不到categoryImg字段。
  • Postman 直接请求 Express 服务器,完全绕过了 Next.js 的缓存层,因此能拿到最新的完整响应。
解决方案原理
  • unstable_noStore(Next.js 13.4+ 已更名为稳定版noStore)是 Next.js 提供的 API,核心作用是强制禁用当前函数内的所有数据缓存。
  • 在fetchProductsByCategory顶部调用noStore()后,Next.js 会将该函数标记为动态数据获取逻辑:每次页面/组件渲染时,都会重新向 Express 发起请求,获取最新的接口响应,不再复用缓存的旧数据。
  • 这就从根源上解决了缓存旧数据导致字段丢失的问题,确保每次都能拿到包含categoryImg的完整数据。

补充:你也可以通过给fetch添加配置项实现相同效果,比如:

fetch('/product/category/:category', { cache: 'no-store' })

两者的区别是:noStore()作用于整个函数内的所有请求,而cache: 'no-store'仅对当前fetch请求生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:42:41