Est-il possible de déclarer des variables globales dans Node / Express 4.0

J’ai plusieurs itinéraires qui doivent accéder à une firebase database. Pour le développement, j’utilise une firebase database locale et, évidemment, j’utilise une firebase database hébergée.

Le seul problème est que chaque fois que je vais pousser une version, je dois parcourir chaque route manuellement pour changer le lien de la firebase database.

par exemple

var mongodb = require('mongojs').connect('urlhere', ['Collection']);

Ce serait bien si je pouvais déclarer une variable dans app.js comme

app.set('mongoDBAddress', 'urlhere');

puis dans chaque fichier, faites quelque chose comme var mongodb = require('mongojs').connect(app.get('mongoDBAddress'), ['Collection']);

Est-ce que quelqu’un sait si cela est réalisable? Cela fait environ une heure que je bousille dessus et que j’essaie d’inclure différentes choses, mais je n’ai aucune chance. Merci.

De la docs :

Dans les navigateurs, la scope de niveau supérieur est la scope globale. Cela signifie que dans les navigateurs, si vous êtes dans la scope globale, var something va définir une variable globale. Dans Node, c’est différent. La scope de niveau supérieur n’est pas la scope globale; var something dans un module de nœud sera local à ce module .

Vous devez penser un peu différemment. Au lieu de créer un object global, créez vos modules afin qu’ils prennent une instance d’ app , par exemple:

 // add.js module.exports = function(app) { // requires an `app` return function add(x, y) { // the actual function to export app.log(x + y) // use dependency } } // index.js var app = {log: console.log.bind(console)} var add = require('./add.js')(app) // pass `app` as a dependency add(1, 2) //^ will log `3` to the console 

C’est la convention dans Express et dans d’autres bibliothèques. app trouve dans votre fichier principal (c.-à-d. index.js ) et les modules requirejs ont un paramètre app .

Vous pouvez append une variable globale à GLOBAL , voyez cette question , bien que cela soit probablement considéré comme une mauvaise pratique.

Nous avons deux méthodes dans node.js pour partager des variables dans des modules.

  1. global
  2. module.export

Mais votre problème semble être différent, ce que j’ai compris, c’est que vous voulez connecter votre application à différentes bases de données sans changer de code. Ce que vous devez faire, c’est utiliser les parameters de ligne de commande

Pour plus de ref

server.js

 var connectTo = { dev : "url1" production : "url2" } var mongodb = require('mongojs').connect(connectTo[process.argv[2]], ['Collection']); 

Exécutez votre server.js en tant que

 node server.js dev // for connecting to development database 

ou

 node server.js production // for connecting to prodiction database 

Pour partager la connexion entre différents modules

 //Method 1 global.mongodb = require('mongojs').connect(connectTo[process.argv[2]], ['Collection']); //Method 2 exports.mongodb = require('mongojs').connect(connectTo[process.argv[2]], ['Collection']); exports.getMongoDBAddress = function() { return connectTo[process.argv[2]] }