module.export и глобальные объекты - PullRequest
0 голосов
/ 15 января 2019

Я в замешательстве.

Иногда, когда мой веб-интерфейс получает данные, он смешивает данные между объектами, и мне кажется, что глобальный объект в файле на самом деле является постоянным.

Вот базовая раскладка кода

handlers.js

const something = require('./otherfile')
let handlers ={}

handlers.customers = function (data, callback) {
  let acceptableMethods = ['post'];
  if (acceptableMethods.indexOf(data.method) > -1) {
    handlers._customers[data.method](data, callback);
  } else {  
    callback(405); 
  }
};

handlers._customers = {}

handlers._customers.post = async function (data, callback) {
  customer.new(data);
  callback(200, 'success')
}

otherfile.js

let contacts_list = [];
let accountData = {};

module.exports = something = {
  new: {
      dostuff: async function (data) {
      // update and reference global objects here..
      accountData.name = data.name;
      accountData.otherProperty = await somefunction(data.prop)
    }
  }
}

Я ожидал, что, поскольку он требует экспортируемого модуля, каждый раз, когда он будет вызывать экспортируемый модуль, он будет рассматриваться как его собственный объект, однако, кажется, что объект не обрабатывается как уникальный и вместо этого перезаписывается в часть и «случайно». Это говорит мне о том, что я могу экспортировать мутирующий объект, такой как массив, в файлы

Прав ли я в том, что глобальный объект сохраняется в нескольких запросах? Повлияет ли установка глобала в объекте экспорта на поведение этого объекта каким-либо образом? В этом случае я не хочу, чтобы эти данные мутировали.

Заранее благодарим за вашу конструктивную критику и рекомендации :)

1 Ответ

0 голосов
/ 15 января 2019

[Реструктурируйте ваш код, чтобы вы создавали новый объект при каждом запросе. Модули кэшируются по первому требованию, поэтому все ваши переменные и свойства объекта будут сохраняться при вызовах.

// handler.js



const somethingFactory = require('./otherfile')

module.exports = function(){
  let handlers = {}
  const something = somethingFactory();

  handlers.customers = function (data, callback) {
    let acceptableMethods = ['post'];
    if (acceptableMethods.indexOf(data.method) > -1) {
      handlers._customers[data.method](data, callback);
    } else {  
      callback(405); 
    }
  };

  handlers._customers = {}

  handlers._customers.post = async function (data, callback) {
    customer.new(data);
    callback(200, 'success')
  }

  return handlers;

};

otherfile.js

module.exports = function(){
  let contacts_list = [];
  let accountData = {};

  return {
     new: {
      dostuff: async function (data) {
      // update and reference global objects here..
      accountData.name = data.name;
      accountData.otherProperty = await somefunction(data.prop)
     }
    }
  }

};

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...