Node.js读取指定目录文件始终返回同一my-files1.txt问题求助
问题根源定位
1. Node.js 模块缓存机制导致配置只读取一次
你当前的所有文件读取、currentPage计算逻辑都写在模块的顶层作用域,CommonJS 模块特性决定了这些代码只会在第一次被require的时候执行一次,之后所有对这个模块的引用都会直接返回缓存的module.exports。也就是说其他进程更新log.txt、config.json之后,只要你的Node进程没有重启,模块不会重新读取这两个配置文件,currentPage永远是第一次加载时的计算结果,如果首次加载时拿到的是1,就会一直返回my-files1.txt。
2. 条件判断逻辑不符合预期
你设置的重置currentPage为1的条件需要同时满足两个要求:
cfg.running不等于true- currentPage大于10
只要其中一个条件不满足,就不会触发重置逻辑。如果你的实际业务需求是只要满足其中一个条件就重置,或是只要currentPage超出范围就重置,当前的判断逻辑完全不符合预期。
3. 配置读取容错缺失
如果log.txt或config.json读取失败、内容为空、格式非法,JSON.parse会直接抛出异常,你现在的代码没有对解析步骤做容错处理,运行异常时会走你预期外的逻辑。
修复方案
把所有配置读取、数据拉取的逻辑封装成可调用的函数,每次需要获取数据时主动调用,重新读取最新的配置:
const fs = require('fs'); const { resolve } = require('path'); const numberOfPages = 10; function readLog() { try { const content = fs.readFileSync(__dirname + '/log.txt', 'utf8'); return JSON.parse(content); } catch (err) { // 读取或解析失败返回默认值 return { tPartition: 1 }; } } function readConfig() { try { const content = fs.readFileSync(__dirname + '/config.json', 'utf8'); return JSON.parse(content); } catch (err) { // 读取或解析失败返回默认值 return { running: false }; } } function readDataset() { const cfg = readConfig(); const lcg = readLog(); let currentPage = lcg.tPartition; // 这里根据你的实际业务需求修改判断逻辑 if(cfg.running!== true || Number(currentPage) > Number(numberOfPages)){ currentPage = 1; } try { return fs.readFileSync(resolve(`./app/assets/myfiles/my-files${currentPage}.txt`), 'utf8'); } catch (err) { return err; } } // 每次调用getData都会读取最新的配置拉取对应文件 function getData() { const dataset = readDataset(); return { data1: dataset } } module.exports = { getData };
后续使用时直接调用getData()方法即可拿到最新的文件内容。
内容的提问来源于stack exchange,提问作者Vakindu
相关产品推荐
相关产品推荐

