Я использую шаблон в моих модулях node.js, который кажется настолько очевидным для меня, что я предполагаю, что с ним что-то не так, или я увижу больше людей, которые это делают. Чтобы сохранить частные переменные, являющиеся глобальными для модуля, я просто добавляю их как свойства объекта модуля. Как так:использовать `module` как пространство имен
module.exports = {
init: function() {
module.someClient = initializeSomethingHere()
},
someMethod: function(done) {
module.someClient.doSomething(done)
}
}
Это кажется предпочтительней для меня, чем-то вроде этого ...
var someClient;
module.exports = {
init: function() {
someClient = initializeSomethingHere()
},
someMethod: function(done) {
someClient.doSomething(done)
}
}
... потому что во втором примере вы должны пойти в поисках var someClient
в верхней части файла чтобы исключить отсутствие ключевого слова var
в рамках метода init
. Я никогда не видел этот шаблон, используемый в других местах, поэтому я задаюсь вопросом, не хватает ли я чего-то, что делает его менее идеальным.
Мысли?
Я использую оба варианта, в зависимости от того, что мне нужно. Если мне нужно экспортировать конструктор, вариант 2. Если мне нужен объект, который используется во многих разных местах, вариант 1. Ничего, ни «лучший». Помните, что узловые модули * кэшируются *, поэтому, если вы 'require()' этот код, опция 1 * может *, но не имеет * *, быть опасным, потому что это не является безопасным для модификации. Иногда это именно то, что вы хотите. Также посмотрите на код: вы экспортируете совершенно разные вещи (прототипированный конструктор объектов против объектного литерала), поэтому, если вам это нужно: отлично. –