全球在NodeJS应用程序

我在一个NodeJS应用程序上工作,我有不同的模块,在这些模块不同的软件包,因为这些软件包正在使用其他软件包的function,我有一个问题,需要控制器到处都是,所以我做的是,我全球化这些控制器,

例如

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

所以我的问题是

  1. 在将这些控制器全球化的过程中是否有任何性能问题,对我的应用程序是否会有任何性能影响?
  2. 如果使用全球性问题,可以采用其他更好的方法吗?

我使用混合的要求(如@Hinrich答案)和global.someNamespaceName.anInstance

通常,我使用global.someNamespaceName.anInstance来引用一个对象 ,即该类的特定实例,如特定的数据库连接或应用程序的特定configuration。 例如,在主应用程序初始化代码中,类似

 var config = { lots of config stuff, eg .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的好处是你可以避免在每个文件开始时有几十个需求,而sorting可能是一个问题。

使用global.myAppName.someOtherName有两个可能的缺点:

  1. 命名空间碰撞。 除非你有一个庞大的项目和多个不交stream的程序员,否则不应该是一个问题。 这也是可能发生的需求也…
  2. 它需要两个查找(.myAppName和.someOtherName)来查找该对象,这将是一个非常小的性能影响。 如果您在循环中引用了该项目数千次,请将其caching在局部variables中。

您可以在您需要的模块中require您的控制器。 所以在模块内部,例如

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

或者你的控制器居住的地方,相对于你的调用模块。 然后你可以访问你的控制器,你可以访问它的导出variables和函数。