Подтвердить что ты не робот

Как использовать глобальную переменную в node.js?

Например, я хочу использовать собственный журнал:

logger = require('basic-logger'),
logger.setLevel('info')

var customConfig = {
showMillis: true,
showTimestamp: true
}

var log = new logger(customConfig)

Как использовать этот регистратор в других модулях вместо console.log?

4b9b3361

Ответ 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__ в тестовой среде.