217 votes

Variables globales Node.js

J'ai posé la question ici : Node.js nécessite-t-il l'héritage ?

On m'a dit que je pouvais placer des variables dans le champ d'application global en omettant la variable.

Cela ne fonctionne pas pour moi.

En d'autres termes, ce qui suit ne fait pas de la _ disponibles dans les fichiers requis.

_ = require('underscore');

Je peux paramétrer avec Express.js la fonction app.set et qu'il soit disponible ailleurs.

Est-ce ainsi que cela est censé fonctionner ?

0 votes

Où se trouve la ligne ci-dessus ?

3 votes

Je pense que vous ne devriez pas poser une nouvelle question si la réponse à votre question précédente ne fonctionne pas. Ajoutez plutôt un commentaire à cet endroit et supprimez l'étiquette "accepté".

0 votes

@alienhard mais c'est vieux, personne ne va le voir.

5voto

DrunkenBeetle Points 41

Je suis d'accord pour dire que l'utilisation de l'espace de noms global/GLOBAL pour définir quoi que ce soit de global est une mauvaise pratique et que je ne l'utilise pas du tout en théorie ( en théorie étant le mot clé). Cependant (oui, le mot clé), je l'utilise pour définir des classes d'erreurs personnalisées :

// Some global/configuration file that gets called in initialisation

global.MyError = [Function of MyError];

Oui, c'est tabou ici, mais si votre site/projet utilise des erreurs personnalisées partout, vous devrez les définir partout, ou au moins quelque part :

  1. Définir la classe d'erreur en premier lieu
  2. Dans le script où vous le lancez
  3. Dans le script où vous l'attrapez

La définition de mes erreurs personnalisées dans l'espace de noms global m'évite de devoir exiger de ma bibliothèque d'erreurs de clients. L'imagerie lance une erreur personnalisée lorsque cette erreur personnalisée n'est pas définie.

0voto

Mike Points 5108

Si vous essayez d'accéder à cordes globalement, je recommande d'utiliser dotenv :

Installer avec :

npm i dotenv

Créez ensuite le fichier .env dans le répertoire Root du projet et définissez toutes les variables que vous voulez globales, par exemple :

DB_HOST='localhost'
DB_DATABASE='my_database'
DB_USER='my_user'
DB_PASSWORD='my_password'

ADMIN_EMAIL='foo@bar.baz'
CITY='Some city'
# ... etc

Vous pouvez même définir ces variables à l'aide de la ligne de commande lorsque vous démarrez le serveur, comme ceci :

NODE_ENV=dev PORT=5000 npm run start-dev

De plus, si vous utilisez git, vous voudrez probablement ajouter .env à votre .gitignore pour vous assurer de ne pas divulguer accidentellement des informations sensibles.

Il suffit alors d'inclure ce qui suit au début de votre server.js (ou quel que soit le premier fichier à exécuter)

require('dotenv').config()

Pour utiliser ces variables n'importe où dans votre code, il suffit d'utiliser process.env.VARIABLE_NAME .

Par exemple :

app.listen(process.env.PORT, () => {
    console.log(`Server is running on port ${process.env.PORT}.`)
})

Note : Je comprends que cela ne répond pas directement à la question puisqu'il s'agit de stocker les chaînes globalement au lieu d'Underscore.js, mais j'ai pensé l'inclure pour être complet.

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