NodeJS如何仅用同一模块实现配置的设置与获取
模块配置无法实时更新的解决方法
不用额外文件完全可以实现实时获取配置,你遇到的问题核心是**exports.getcfg 一开始就绑定了初始的默认配置对象引用**,后续修改 active_config 指向新对象时,exports.getcfg 的引用不会自动同步。下面直接说问题和修复方案:
原代码问题点
你的代码里存在两处语法错误+一处逻辑问题:
let config_defaults = { test_option: false }; let active_config; if(active_config === undefined){ active_config = config_defaults }; exports.getcfg = active_config; // 逻辑问题:直接绑定初始对象引用,后续不会自动更新 const setcfg function(options){ // 语法错误:少了=号 options = Object.assign({}, config_defaults, options); active_config = options; // 这里让active_config指向新对象,但exports.getcfg还是原来的默认对象 return(options); }; exports.setcfg = select_config; // 语法错误:变量名写错,应该是setcfg
修正方案1:把getcfg改成函数
将 exports.getcfg 改为函数,每次调用时返回当前的 active_config,确保拿到最新配置:
let config_defaults = { test_option: false }; let active_config = config_defaults; // 用函数返回最新配置 exports.getcfg = () => active_config; const setcfg = function(options){ active_config = Object.assign({}, config_defaults, options); return active_config; }; exports.setcfg = setcfg;
测试验证:
console.log(testmodule.setcfg({test_option: true})); // >> Output: { test_option: true } console.log(testmodule.getcfg()); // >> Output: { test_option: true }
修正方案2:基于固定对象引用修改
如果不想用函数,也可以保持一个固定对象引用,只修改其内部属性而非替换整个对象:
let active_config = { test_option: false }; exports.getcfg = active_config; // 始终指向同一个对象 const setcfg = function(options){ // 直接修改对象内部属性,外部引用会同步更新 Object.assign(active_config, { test_option: false }, options); return active_config; }; exports.setcfg = setcfg;
这种方式下,外部通过 testmodule.getcfg 能直接看到属性变化,测试结果同样符合预期。
内容的提问来源于stack exchange,提问作者bombali_reyiz
相关产品推荐
相关产品推荐

