web-dev-qa-db-fra.com

Meilleur moyen de stocker la configuration de base de données dans l'application Node.Js / Express

Quel serait le meilleur moyen de stocker DB config (nom d'utilisateur, mot de passe) dans une application open source qui s'exécute sur node.js/Express? Deux questions spécifiques:

  1. Dois-je le mettre dans un fichier séparé config.js dans le dossier /lib, Par exemple, et ne jamais l'inclure dans le référentiel maître qui est disponible publiquement sur GitHub?

  2. Pour inclure la configuration, est-ce aussi simple que require('./config.js') à partir du fichier qui en a besoin ou existe-t-il un meilleur moyen de le faire?

PS désolé si les questions semblent un peu simples ou pas si bien formulées, mais je commence tout juste :)

58

Je ne sais pas si c'est la meilleure pratique, mais personnellement, j'ai un config.json fichier où je stocke mes informations de connexion à la base de données. Ensuite, je fais ce qui suit:

// options.js
var fs = require('fs'),
configPath = './config.json';
var parsed = JSON.parse(fs.readFileSync(configPath, 'UTF-8'));
exports.storageConfig=  parsed;

Ensuite, à partir d'un fichier différent, je fais ce qui suit:

var options = require('./options');

var loginData = {
        Host: options.storageConfig.Host,
        user: options.storageConfig.user,
        password: options.storageConfig.password
};
21
anvarik

Voici comment je le fais:

Créez un fichier config.js contenant des objets représentant vos configurations:

var config = {
development: {
    //url to be used in link generation
    url: 'http://my.site.com',
    //mongodb connection settings
    database: {
        Host:   '127.0.0.1',
        port:   '27017',
        db:     'site_dev'
    },
    //server details
    server: {
        Host: '127.0.0.1',
        port: '3422'
    }
},
production: {
    //url to be used in link generation
    url: 'http://my.site.com',
    //mongodb connection settings
    database: {
        Host: '127.0.0.1',
        port: '27017',
        db:     'site'
    },
    //server details
    server: {
        Host:   '127.0.0.1',
        port:   '3421'
    }
}
};
module.exports = config;

Puis dans mon index.js (ou ailleurs),

var env = process.env.NODE_ENV || 'development';
var config = require('./config')[env];

Traitez ensuite avec cet objet, par exemple.

var server = express();
server.listen(config.server.port);
...
89
Stephen Wright

Pour exécuter des applications de jouets où j'ai besoin de masquer les informations d'identification de la base de données, j'utilise le module dotenv .

Placez vos informations sensibles dans un fichier .env (qui est .gitignored), placez require('dotenv').config(); dans votre application; dotenv crée des entrées dans process.env que vous pouvez consulter.

.env fichier:

DATABASE_PASSWORD=mypw
DATABASE_NAME=some_db

Pour faire référence aux valeurs:

process.env.DATABASE_PASSWORD
16
Robb Broome

Je mets des arguments. tout comme le port de nombreux exemples de node.js. probablement pour toujours, pm2, nodemon pour exécuter votre application. Cette variable ne fait donc pas partie de votre code source. et ils sont globalement disponibles aussi.

process.env.PORT
process.env.DATABASE_USER
process.env.DATABASE_PASSWORD


PORT=3000 DATABASE_Host=localhost DATABASE_USER=admin DATABASE_PASSWORD=mypassword node app.js

export PORT=3000
export DATABASE_Host=localhost
export DATABASE_PORT=27017
export DATABASE_USER=admin
export DATABASE_PASSWORD=mypassword
node app.js

var server = app.listen(process.env.PORT, function() {
});

var mongoClient = new MongoClient(new Server(process.env.DATABASE_Host, process.env.DATABASE_PORT));
3
wayne

Pour inclure la configuration, est-ce aussi simple que require ('./ config.js') dans le fichier qui en a besoin ou existe-t-il un meilleur moyen de le faire?

C'est la bonne façon de stocker des fichiers de configuration.

La meilleure approche consiste à écrire votre application entière comme un module node.js ordinaire et à écrire un petit fichier de démarrage qui l’appelle. Cette idée vous permet également d'utiliser différents pilotes de base de données à l'aide de l'injection de dépendance.

La solution est bonne, mais pas parfaite, c'est l'environnement. Il est partagé entre toutes les applications. Par conséquent, si vous souhaitez que certaines données soient accessibles à toutes, c'est le meilleur choix. Mais si vous avez une configuration pour une application particulière, pas beaucoup.

PS: Et s'il vous plaît, n'utilisez pas JSON pour cela. C'est la pire idée possible. :)

1
alex

J'ai trouvé cela une bonne façon de gérer ma configuration, en tenant compte de différents environnements:

config.café

exports.setEnvironment = (env) ->
    switch env
        when "development"
            exports.DEBUG_LOG = true
            exports.DB_PORT = '27017'
            # ...
        when "testing"
            exports.DEBUG_ERROR = true
            exports.DEBUG_CLIENT = true
            # ...
        when "production"
            exports.DEBUG_LOG = false
            # ...
        else console.log "environment #{env} not found"

serveur.café:

config = require('./config')
config.setEnvironment env
1
Flaudre