Промежуточное ПО Expressjs сохраняет переменные - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь сделать простую вещь, которая очевидна. Я верю в приведенный ниже код:

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 голосов
/ 01 марта 2019

Основная проблема заключается в том, что require () кэшируется, поэтому require('../../config/config') возвращает ссылку на тот же экземпляр , и в результате изменение в одном месте приводит к получению всех других ссылок и последующих require s.этот измененный экземпляр.

Самое простое решение было бы иметь функцию в конфигурации для возврата объекта конфигурации, так что каждый раз, вызывая функцию get config, вы получите новый экземпляр с по существутот же контент.Т.е.:

config.js:

module.exports = {
  getDefaultOptions: function(){
    return {foo: 'bar', ip: '1.1.1.1'}
  }
};
...