Armazenando configuração em Nodejs com json
É bastante comum deixar configurações em aquivos extras de json, yml, … arquivos estes ignorados no versionador de código e colocar no código mesmo somente o require desses arquivo.
Meus testes iniciais com nodejs eu usei uma variável de ambiente a process.env.NODE_ENV para determinar a qual banco de dados deveria me conectar, isso resolveu o problema por bastante tempo, e teria resolvido não fosse o banco de dados de produção ter um nome completamente fora da convenção criada por mim.
Pesquisando um pouco encontrei que todo arquivo json feito require no nodejs retorna um hash :).
Para meu exemplo vou modificar um pouco o arquivo models/index.js do post Mocha, expect.js e Sequelize: Uma introdução.
Primeiro criar o arquivo json, eu criei o config/database.json, com o seguinte conteúdo:
{
"development": {
"database": "app_development",
"username": "root",
"password": "",
"host": "localhost",
"port": 3306
},
"test": {
"database": "app_test",
"username": "root",
"password": "",
"host": "localhost",
"port": 3306
},
"production": {
"database": "production_database",
"username": "norootuser",
"password": "MySuperSecretPassword",
"host": "localhost",
"port": 1234
}
}
Agora meu arquivo json só precisa seguir o padrão de nomenclatura da configuração, o banco de dados e qualquer outra informação ficará a cargo do programador.
No models/index.js, a linha referente ao banco de dados ficará assim:
var config = require('../config/database')[process.env.NODE_ENV];
var DataTypes = require('sequelize');
var sequelize = new DataTypes(config.database, config.username,
config.password, {
logging: false,
port: config.port,
host: config.host
});
E pronto temos nossa configuração.
Err, não esqueça de colocar o config/database.json como ignorado no versionador de código, aka, .gitignore ou .hgignore. Ah, eu costumo criar um config/database.json.sample para caso eu não lembre da configuração ou então um desenvolvedor novo entre no projeto :)