2015-04-23 3 views
1

Я работаю над приложением NodeJS, у меня есть разные модули и в этих модулях разные пакеты, поскольку эти пакеты используют функции из других пакетов, у меня была проблема, требующая контроллеров повсюду, поэтому я сделал это, я сделал глобализацию эти контроллеры,Глобальный в приложении NodeJS

eg

global.CTRLS = { userCtrl : [require('./User/profile/controller/profileCtrl')]  
, productCtrl : [require('./Product/Products/controller/productCtrl')] } 

поэтому мой вопрос

  1. Есть ли какие-либо проблемы с производительностью в то время как глобализирующемся эти контроллеры, будет ли какой-либо эффект на производительность моего приложения?
  2. Если есть проблема с использованием глобального, то какой может быть лучший способ?
+0

Глобализация модулей - не очень хорошая идея, потому что это может испортить ваши переменные. [здесь] (http://www.bennadel.com/blog/2169-where-does-node-js-and-require-look-for-modules.htm) для некоторого базового введения. пожалуйста, покажите какой-нибудь код, если мы поможем вам практиковать по вашим вопросам. – Hinrich

+0

Я глобализую только контроллеры, которые содержат функции внутри этих модулей, можете ли вы сказать мне лучший способ? – Zeeshan

+0

Можете ли вы показать свой код, пожалуйста? – Hinrich

ответ

2

Я использую смесь требуемых (как в ответе @Hinrich) и global.someNamespaceName.anInstance.

В общем, я использую global.someNamespaceName.anInstance для обозначения объекта , т.е. конкретного экземпляра класса, таких как конкретное соединение базы данных или конкретной конфигурация приложения. Например, в основной код инициализации приложения, что-то вроде

var config = { lots of config stuff, e.g. .mongoURI, .port, .loggerFormat, .prefs, ... } 
... 
global.myAppName.config = config ; 
global.myAppName.myMongo = new MyMongo(config.mongoURI); 
global.myAppName.mySQL = new MySQL(config.mySQLSettings); 

Я использую требует в основном для «типичных» узлов иш вещей и стандартных библиотек, т.е. var QueryString = require('querystring');

Это «кажется правильным» для мое мышление, но не знаю, существуют ли какие-то конкретные рекомендации, и в любом случае все в порядке. Преимущество global.xxx заключается в том, что вы можете избежать множества требований в начале каждого файла, и заказ может быть проблемой.

Два возможных недостатков использования global.myAppName.someOtherName:

  1. пространство имен столкновений. Не должно быть проблем, если у вас нет большого проекта и нескольких программистов, которые не общаются. И это то, что может произойти с необходимостью тоже ...
  2. Для поиска объекта требуется два поиска (.myAppName и .someOtherName). Это будет крайне незначительный удар производительности. Если вы ссылаетесь на элемент тысячи раз в цикле, кешируйте его в локальной переменной.
1

require Ваши контроллеры в тех модулях, где они вам нужны. поэтому внутри модуля, например,

var profileCtrl = require('./User/profile/controller/profileCtrl'); 

или где бы ни находился ваш контроллер, относительно вашего вызывающего модуля. Затем у вас есть доступ к контроллеру, и вы можете получить доступ к его экспортированным переменным и функциям.

Смежные вопросы