如何在node.js中使用全局variables?
例如,我想使用自定义logging器:
logger = require('basic-logger'), logger.setLevel('info') var customConfig = { showMillis: true, showTimestamp: true } var log = new logger(customConfig)
如何在其他模块而不是console.log中使用此logging器?
大多数人build议不要使用全局variables。 如果你想在不同模块中使用相同的logging器类,你可以这样做
logger.js
module.exports = new logger(customConfig);
foobar.js
var logger = require('./logger'); logger('barfoo');
如果你确实想要一个全局variables,你可以这样做:
global.logger = new logger(customConfig);
global.myNumber; //Delclaration of the global variable - undefined global.myNumber = 5; //Global variable initialized to value 5. var myNumberSquared = global.myNumber * global.myNumber; //Using the global variable.
当涉及到全局variables时,Node.js与客户端JavaScript不同。 仅仅因为你在Node.js脚本的顶部使用了var这个词,并不意味着这个variables将被你需要的所有对象(比如你的“基本logging器”)所访问。
为了使全局变得简单,只需把全局variables和variables名称前面的一个点放在一起即可。 所以如果我想company_id是全局的,我把它称为global.company_id。 但要小心,global.company_id和company_id是相同的东西,所以不要将全局variables命名为任何其他脚本中的任何其他variables – 将在您的服务器上运行的任何其他脚本或同一代码中的任何其他地方。
你可以使用global或GLOBAL来定义它,nodejs同时支持。
例如
global.underscore = require("underscore");
要么
GLOBAL.underscore = require("underscore");
我会build议每次使用全局检查,如果variables已经定义通过简单的检查
if (!global.logger){ global.logger = require('my_logger'); }
我发现它有更好的performance
以下可能会更好地避免if
语句:
global.logger || (global.logger = require('my_logger'));