116 votes

Comment utiliser une variable globale dans node.js ?

Par exemple, je veux utiliser un enregistreur personnalisé :

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

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

var log = new logger(customConfig)

Comment utiliser ce logger dans d'autres modules au lieu de console.log ?

2 votes

1 votes

Cela répond-il à votre question ? Variables globales pour les modules standards node.js ?

2 votes

FYI Utilisez global (en minuscules) au lieu de GLOBAL (majuscules) par avertissement de dépréciation du nœud

143voto

Pickels Points 9201

La plupart des gens déconseillent l'utilisation de variables globales. Si vous voulez la même classe de logger dans différents modules, vous pouvez faire ceci

logger.js

  module.exports = new logger(customConfig);

foobar.js

  var logger = require('./logger');
  logger('barfoo');

Si vous voulez une variable globale, vous pouvez le faire :

global.logger = new logger(customConfig);

71voto

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 est différent de client Side JavaScript quand il s'agit de variables globales. Ce n'est pas parce que vous utilisez le mot var en haut de votre script de Node.js que la variable sera accessible par tous les objets dont vous avez besoin, comme votre 'basic-logger'.

Pour rendre quelque chose global, il suffit de mettre le mot global et un point devant le nom de la variable. Ainsi, si je veux que company_id soit global, je l'appelle global.company_id. Mais attention, global.company_id et company_id sont la même chose donc ne nommez pas la variable global de la même façon que n'importe quelle autre variable dans n'importe quel autre script - n'importe quel autre script qui sera exécuté sur votre serveur ou n'importe quel autre endroit dans le même code.

35voto

Shubham Gautam Points 239

Vous pouvez le définir en utilisant global ou GLOBAL, nodejs supporte les deux.

par exemple

global.underscore = require("underscore");

o

GLOBAL.underscore = require("underscore");

26voto

Doron Segal Points 205

Je suggère qu'à chaque fois que l'on utilise le global, il faut vérifier si la variable est déjà définie en vérifiant simplement

if (!global.logger){
  global.logger = require('my_logger');
}

J'ai trouvé qu'il avait de meilleures performances

17voto

Raz Points 551

Les variables globales peuvent être utilisées dans Node lorsqu'il est utilisé à bon escient .

Déclaration des variables globales dans Node :

a = 10;
GLOBAL.a = 10;
global.a = 10;

Toutes les commandes ci-dessus effectuent les mêmes actions avec des syntaxes différentes.

Utiliser les variables globales lorsqu'elles ne sont pas sur le point d'être modifiées

Voici un exemple de ce qui peut arriver lorsqu'on utilise des variables globales :

// 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;
});

Expliqué :

Exécuter la route des utilisateurs en premier et recevoir 10 ;

Ensuite, exécutez la route des autorisations et recevez 11 ;

Ensuite, exécutez à nouveau la route des utilisateurs et recevez également 11 au lieu de 10 ;

Les variables globales peuvent être dépassées !

Maintenant, pensez à l'utilisation de l'express et à l'assignation de l'objet de la réserve comme global Et vous vous retrouvez avec une erreur asynchrone qui devient corrompue et le serveur s'arrête.

Quand utiliser les variables globales ?

Comme je l'ai dit - quand var n'est pas sur le point d'être modifié. Quoi qu'il en soit, il est plus recommandé d'utiliser la fonction process.env à partir du fichier de configuration.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X