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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:36:00