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

Node.js读取json文件无法获取最新更新内容的问题排查

问题原因
  • Node.js 模块缓存机制(核心原因):Node.js 的 require 机制会对已导入的模块进行缓存,第一次导入 pFunctions.js 时,会执行文件内所有顶层代码(读取文件、解析JSON、生成pFunctions对象),后续再导入该模块时,会直接返回缓存的导出对象,不会重新执行文件读取逻辑,因此拿到的永远是第一次读取的结果。
  • 文件写入异步时序问题:如果更新log.txt、config.json时用的是fs.writeFile等异步写入API,未等待写入完成就触发下一次计算的读取操作,会出现读取到旧内容的情况(你提到手动查看文件已经更新,这个概率较低)。
  • 读写路径不一致:写入文件的路径和 pFunctions.js 中用__dirname拼接的读取路径不是同一个位置,导致读取的始终是未更新的旧文件。
  • 操作系统文件缓存:部分场景下操作系统会对频繁读取的文件做缓存,不过这个概率极低,且手动打开文件会触发缓存刷新,你手动查看文件是最新的就可以排除这个问题。
修复方案

方案1(推荐):封装配置读取逻辑为函数,每次调用主动刷新

不要在模块顶层执行文件读取操作,把读取、解析、生成参数的逻辑封装为可调用函数,每次需要最新参数时主动调用获取:
修改后pFunctions.js代码:

const fs = require('fs');

// Read logs
function readLog() {
    try { 
        return fs.readFileSync(__dirname + '/' + 'log.txt', {'encoding':'utf8','flag':'rs+'});
    }
    catch (err) { 
        return '';
    }
}

// Read configurations
function readConfig() {
    try { 
        return fs.readFileSync(__dirname + '/' + 'config.json', {'encoding':'utf8','flag':'rs+'});
    }
    catch (err) { 
        return '';
    }
}

// Function to read dataset
function readDataset(cfg, lcg) {
    // 原有逻辑调整为接收cfg和lcg参数,不依赖顶层变量
    ....
    ....
}

// 封装为调用函数,每次执行重新读取最新文件生成参数
function getPFunctions() {
    let config = readConfig();
    let log = readLog();
    let cfg = JSON.parse(config);
    let lcg = JSON.parse(log);
    let dataset = readDataset(cfg, lcg);
    return {
        parameter1: dataset
    }
}

module.exports = { getPFunctions };

修改后computation.js代码:

const { getPFunctions } = require('./app/config/pFunctions');

// 每次需要最新参数时调用函数获取
let newParams = getPFunctions(); 

方案2:确保文件写入完成后再执行读取

如果使用异步写入API更新配置文件,要等待写入回调触发后,再执行下一次计算逻辑,或者直接使用fs.writeFileSync同步写入,避免时序错位。

方案3(不推荐):手动清除模块缓存

每次需要更新参数前手动删除对应模块的缓存,强制重新导入pFunctions.js,该方案性能差且容易出现缓存清理不彻底的问题,仅作为临时验证方案使用:

// computation.js中每次导入前清除缓存
delete require.cache[require.resolve('./app/config/pFunctions')];
const {pFunctions} = require('./app/config/pFunctions');
let newParams = pFunctions;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:45:01