例如,我想使用自定义记录器:
logger = require('basic-logger'),
logger.setLevel('info')
var customConfig = {
showMillis: true,
showTimestamp: true
}
var log = new logger(customConfig)
如何在其他模块而不是console.log中使用此记录器?
例如,我想使用自定义记录器:
logger = require('basic-logger'),
logger.setLevel('info')
var customConfig = {
showMillis: true,
showTimestamp: true
}
var log = new logger(customConfig)
如何在其他模块而不是console.log中使用此记录器?
Answers:
大多数人建议不要使用全局变量。如果要在不同模块中使用相同的记录器类,则可以执行此操作
logger.js
module.exports = new logger(customConfig);
foobar.js
var logger = require('./logger');
logger('barfoo');
如果确实需要全局变量,则可以执行以下操作:
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.
在全局变量方面,Node.js与客户端JavaScript不同。仅仅因为在Node.js脚本的顶部使用了单词var,并不意味着该变量将可被所需的所有对象(例如“ basic-logger”)访问。
要使某些内容具有全局性,只需在变量名称前加上“ global”一词和一个点。因此,如果我希望company_id是全局的,则将其称为global.company_id。但是要小心,global.company_id和company_id是同一件事,因此请勿将全局变量命名为与任何其他脚本中的任何其他变量相同的事物-将在您的服务器或同一代码内任何其他位置运行的任何其他脚本。
您可以使用global或GLOBAL来定义它,nodejs支持两者。
例如
global.underscore = require("underscore");
要么
GLOBAL.underscore = require("underscore");
明智地使用全局变量可以在Node中使用。
在节点中声明全局变量:
a = 10;
GLOBAL.a = 10;
global.a = 10;
以上所有命令使用不同的语法执行相同的操作。
在不打算更改全局变量时使用它们
这是使用全局变量时可能发生的事的示例:
// app.js
a = 10; // no var or let or const means global
// users.js
app.get("/users", (req, res, next) => {
res.send(a); // 10;
});
// permissions.js
app.get("/permissions", (req, res, next) => {
a = 11; // notice that there is no previous declaration of a in the permissions.js, means we looking for the global instance of a.
res.send(a); // 11;
});
解释:
运行用户首先进行路由,并获得10;
然后运行权限路由并接收11;
然后,再次运行用户路由,并收到11条而不是10条;
全局变量可以被超越!
现在考虑将express和assignin res对象用作全局对象。您最终会收到异步错误,损坏并关闭服务器。
什么时候使用全局变量?
正如我所说的-当var不会被更改时。无论如何,建议您使用process.env配置文件中的对象。