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

Node.js更新db.json后接口返回旧数据仅重启服务生效问题

问题原因
  • Node.js 的 require 加载机制自带模块缓存,你在服务启动时执行的 var filex = require('./db.json') 会把当时的db.json内容加载到内存并永久缓存,后续你修改磁盘上的db.json文件不会自动更新这块缓存,所以接口返回的filex永远是服务启动时的旧数据,只有重启服务才会重新加载文件内容。
修复方案

有两种可选的修复方式,按需选择即可:

方式1:每次请求实时读取文件(简单稳妥,适合低并发场景)

删掉全局声明的var filex = require('./db.json')这行代码,所有需要返回db.json内容的接口,每次请求时都重新读取磁盘文件:

// 你已经引入了jsonfile,直接用它的读文件方法即可
// 修改所有返回db内容的接口,示例如下:
app.post('/api',function(req,res){
    const latestData = jsonfile.readFileSync(file)
    res.send(latestData)
})
app.get('/api',function(req,res){
    const latestData = jsonfile.readFileSync(file)
    res.send(latestData)
})

app.post('/api/v1/users/initial_authentication',function(req,res){
    const latestData = jsonfile.readFileSync(file)
    res.send(latestData)
})
app.get('/api/v1/users/initial_authentication',function(req,res){
    const latestData = jsonfile.readFileSync(file)
    res.send(latestData)
})

方式2:更新文件同时更新内存变量(性能更高,适合高并发场景)

保留全局的filex变量,每次你修改完db.json文件之后,主动更新filex的值,不用每次请求读磁盘,也不需要修改其他接口的代码:

// 原来的写文件逻辑修改为:
app.post('/gettingdata',function(req,res){
    var user_id = req.body.usrid;
    var obj = JSON.parse(user_id)
    jsonfile.writeFileSync(file, obj,{flag: 'w'});
    // 新增这行,同步更新内存里的缓存变量
    filex = obj
    res.send('updated');
})

注意如果你的项目还有其他修改db.json文件的入口,需要在所有写文件的位置都同步更新filex变量,避免出现数据不一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:15:00