Как использовать глобальную переменную в node.js?
Например, я хочу использовать собственный журнал:
logger = require('basic-logger'),
logger.setLevel('info')
var customConfig = {
showMillis: true,
showTimestamp: true
}
var log = new logger(customConfig)
Как использовать этот регистратор в других модулях вместо console.log?
Ответы
Ответ 1
Большинство людей советуют не использовать глобальные переменные. Если вы хотите использовать один и тот же класс журнала в разных модулях, вы можете сделать это
logger.js
module.exports = new logger(customConfig);
foobar.js
var logger = require('./logger');
logger('barfoo');
Если вы хотите глобальную переменную, которую вы можете сделать:
global.logger = new logger(customConfig);
Ответ 2
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, когда дело доходит до глобальных переменных. Просто потому, что вы используете слово var в верхней части вашего Node.js script, не означает, что переменная будет доступна для всех объектов, которые вам нужны, например, для вашего базового регистратора.
Чтобы сделать что-то глобальное, просто поместите слово global и точку перед именем переменной. Поэтому, если я хочу, чтобы company_id был глобальным, я называю global.company_id. Но будьте осторожны, global.company_id и company_id - это одно и то же, поэтому не называйте глобальную переменную той же самой, что и любая другая переменная в любом другом script - любом другом script, который будет работать на вашем сервере или в любом другом месте в том же коде.
Ответ 3
вы можете определить его с помощью глобальных или глобальных, nodejs поддерживает оба.
например,
global.underscore = require("underscore");
или
global.underscore = require("underscore");
Ответ 4
Я бы предлагал каждый раз при использовании глобальной проверки, если переменная уже определена, просто проверьте
if (!global.logger){
global.logger = require('my_logger');
}
Я нашел, что он имеет лучшую производительность
Ответ 5
Может быть лучше избегать оператора if
:
global.logger || (global.logger = require('my_logger'));
Ответ 6
Глобальные переменные можно использовать в Node, если использовать их с умом.
Объявление глобальных переменных в 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
из файла конфигурации.
Ответ 7
Если ваше приложение написано на TypeScript, попробуйте
(global as any).logger = // ...
или же
Object.assign(global, { logger: // ... })
Однако я сделаю это только тогда, когда React Native __DEV__
в тестовой среде.