Armazenando configuração em Nodejs com json

Deixando as configuração em arquivo json quando se trabalha com nodejs

#dev, #javascript

É 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 :)