NodeJS 应用程序中的全局
Global in NodeJS application
我正在开发一个 NodeJS 应用程序,我有不同的模块,并且在这些模块中有不同的包,因为这些包使用其他包中的函数,我遇到了到处都需要控制器的问题,所以我所做的是,我将这些控制器全球化,
例如
global.CTRLS = { userCtrl : [require('./User/profile/controller/profileCtrl')]
, productCtrl : [require('./Product/Products/controller/productCtrl')] }
所以我的问题是
- 全球化这些控制器时是否存在任何性能问题,是否会对我的应用程序产生任何性能影响?
- 如果使用全局有问题,其他更好的方法是什么?
您可以 require
在您需要的模块中使用您的控制器。所以在模块内部,例如
var profileCtrl = require('./User/profile/controller/profileCtrl');
或者你的控制器所在的任何地方,相对于你的调用模块。然后你就可以访问你的控制器,你可以访问它的导出变量和函数。
我混合使用 requires(如@Hinrich 的回答)和 global.someNamespaceName.anInstance
。
一般来说,我用global.someNamespaceName.anInstance
来引用一个对象,即class的具体实例化,比如具体的数据库连接,或您的应用程序的特定配置。例如,在主应用程序初始化代码中,类似
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);
我使用 requires 主要用于 "typical" 节点式的东西和标准库,即 var QueryString = require('querystring');
这个"seems right"是我的想法,但不知道有没有具体的指导方针,不管哪种方式都可以。 global.xxx 的优点是你可以避免在每个文件的开头有几十个要求,并且排序可能是一个问题。
使用 global.myAppName.someOtherName 的两个可能缺点:
- 命名空间冲突。除非你有一个巨大的项目和多个不沟通的程序员,否则应该不是问题。这也是 requires 可能发生的事情...
- 需要两次查找(.myAppName 和 .someOtherName)才能找到该对象,这将是一个极小的性能损失。如果您在循环中引用该项目数千次,请将其缓存在局部变量中。
我正在开发一个 NodeJS 应用程序,我有不同的模块,并且在这些模块中有不同的包,因为这些包使用其他包中的函数,我遇到了到处都需要控制器的问题,所以我所做的是,我将这些控制器全球化,
例如
global.CTRLS = { userCtrl : [require('./User/profile/controller/profileCtrl')]
, productCtrl : [require('./Product/Products/controller/productCtrl')] }
所以我的问题是
- 全球化这些控制器时是否存在任何性能问题,是否会对我的应用程序产生任何性能影响?
- 如果使用全局有问题,其他更好的方法是什么?
您可以 require
在您需要的模块中使用您的控制器。所以在模块内部,例如
var profileCtrl = require('./User/profile/controller/profileCtrl');
或者你的控制器所在的任何地方,相对于你的调用模块。然后你就可以访问你的控制器,你可以访问它的导出变量和函数。
我混合使用 requires(如@Hinrich 的回答)和 global.someNamespaceName.anInstance
。
一般来说,我用global.someNamespaceName.anInstance
来引用一个对象,即class的具体实例化,比如具体的数据库连接,或您的应用程序的特定配置。例如,在主应用程序初始化代码中,类似
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);
我使用 requires 主要用于 "typical" 节点式的东西和标准库,即 var QueryString = require('querystring');
这个"seems right"是我的想法,但不知道有没有具体的指导方针,不管哪种方式都可以。 global.xxx 的优点是你可以避免在每个文件的开头有几十个要求,并且排序可能是一个问题。
使用 global.myAppName.someOtherName 的两个可能缺点:
- 命名空间冲突。除非你有一个巨大的项目和多个不沟通的程序员,否则应该不是问题。这也是 requires 可能发生的事情...
- 需要两次查找(.myAppName 和 .someOtherName)才能找到该对象,这将是一个极小的性能损失。如果您在循环中引用该项目数千次,请将其缓存在局部变量中。