Expressjs中间件保持变量不变

时间:2019-03-01 15:42:23

标签: javascript node.js express middleware

我正在尝试做一个简单的事情,我相信下面的代码很明显:

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变量。

知道为什么会发生这种令人毛骨悚然的事情的人吗?

谢谢

1 个答案:

答案 0 :(得分:0)

主要问题是require()已被缓存,因此require('../../config/config')返回对相同实例的引用,结果,在一个地方更改会导致所有其他引用以及后续的{{1 }}来获取修改后的实例。

最简单的解决方案是在config中具有一个函数,以返回一个配置对象,这样,每次调用get config函数时,您将获得一个内容基本相同的新实例。即:

config.js:

require