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.
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]] }