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

Next.js构建后修改接口引用的JSON文件,如何让接口返回更新内容?

问题根因

  • Node.js的require模块加载机制默认会缓存已加载的文件内容,只要服务进程不重启,重复require同一个文件都会直接返回第一次加载的缓存结果,不会重新读取磁盘上的最新文件。
  • Next.js构建时会把静态导入的JSON文件直接打包到构建产物中,运行时不再关联原data.json文件,所以修改/删除原文件都不会影响接口返回。

解决方案1(推荐):使用fs模块动态读取文件

放弃require导入,改用Node.js原生fs模块每次请求都主动读取磁盘上的最新文件,配合process.cwd()定位项目根目录路径,适配开发和生产环境的路径差异。
修改后的pages/api/info.js代码如下:

import fs from 'fs'
import path from 'path'

export default function handler(req, res) {
  // 定位项目根目录下/data/data.json文件的绝对路径
  const jsonFilePath = path.join(process.cwd(), 'data', 'data.json')
  // 读取文件内容并解析为JSON
  const fileContent = fs.readFileSync(jsonFilePath, 'utf-8')
  const data = JSON.parse(fileContent)
  
  // 原有业务逻辑保持不变
  res.status(200).json(data.something)
}

如果你的JSON文件较大,可以改用异步fs.readFile避免阻塞事件循环,普通大小的配置类JSON用同步读取性能足够。

解决方案2:清除require缓存

如果仍要使用require导入,可以在每次加载前手动清除对应文件的缓存:

export default function handler(req, res) {
  // 清除data.json的模块缓存
  delete require.cache[require.resolve('../../data/data.json')]
  const data = require('../../data/data.json')
  
  res.status(200).json(data.something)
}

该方案依赖相对路径解析的准确性,生产环境构建后可能出现路径匹配失败导致缓存清除失效的问题,仅适合开发阶段临时使用。

额外注意

如果你的项目部署在Serverless平台,因为Serverless函数实例是冷启动且独立的,直接修改服务端本地的JSON文件不会生效,这种场景建议把JSON内容存在数据库、对象存储等外部存储中,API路由从外部存储读取最新内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 02:06:04