我正在尝试做一个简单的事情,我相信下面的代码很明显:
module.exports = function(req, res, next) {
var dop = require('../../config/config').DefaultOptions;
console.log(require('../../config/config').DefaultOptions);
console.log(dop);
dop.firstPage = 'test.sjs';
next();
};
这是一个Expressjs中间件,非常简单,但是有趣的一点是,下次我加载页面时,两个console.log结果都已更改为“ firstPage:test.sjs”。它不应该这样,它只能更改dop变量。
知道为什么会发生这种令人毛骨悚然的事情的人吗?
谢谢
答案 0 :(得分:0)
主要问题是require()已被缓存,因此require('../../config/config')
返回对相同实例的引用,结果,在一个地方更改会导致所有其他引用以及后续的{{1 }}来获取修改后的实例。
最简单的解决方案是在config中具有一个函数,以返回一个配置对象,这样,每次调用get config函数时,您将获得一个内容基本相同的新实例。即:
config.js:
require