Data

27 out, 2015

Crie strings de conexão MongoDB utilizando objetos com mongo-uri-builder

Publicidade

Recentemente, eu tive a necessidade de armazenar a string de conexão MongoDB para uma aplicação NodeJS que estou construindo. Claro que não foi nada de mais, e no começo eu armazenava isso em um arquivo.

Mas em algum momento eu percebi que precisava substituir partes da string para alterar algumas configurações em produção (por exemplo, adicionar configurações de réplicas e de autenticação). Por isso, teria sido bom ter uma maneira de armazenar essa configuração como um objeto “bem organizado” e, em seguida, substituir apenas as propriedades que eu queria mudar.

Costumo usar o módulo config para armazenar a minha configuração, e então eu queria ser capaz de fazer algo assim no meu arquivo de configuração:

{     "mongo": {         "host": "localhost",         "port": 27017,         "database": "mydb",         "username": "loige",         "password": "whyDoYouWantToKnowMyPassword"     } }

E, em seguida, ser capaz de recuperar esses dados e utilizá-los com uma nova instância MongoClient:

var MongoClient = require('mongodb').MongoClient;   var config = require('config');  var mongoConfig = config.get('mongo');   MongoClient.connect(createConnectionString(mongoConfig), function(err, db) {       //... });

O pedaço que faltava aqui era a função createConnectionString Como fazer isso? Eu fiz uma busca rápida no NPM e não consegui encontrar algo pronto para ser usado… Assim, já que era uma tarefa muito fácil e eu gosto de criar novos pacotes, decidi construí-lo eu mesmo: bem-vindo, mongo-uri-construtor! It’s alive!

mongodb-connection

(Sim, foi mais ou menos essa a sensação que tive após o launch do npm publish; pode me chamar de louco…)

O pacote mongo-uri-builder

mongo-uri-builder é um pacote NodeJS que permite criar facilmente strings de conexão MongoDB usando objetos de configuração.

O objeto de configuração que o módulo espera se parece com isto:

var mongoConnectionConfig = {       username: 'user', // the username      password: 'pass', // the password      host: 'host1', // the main host (default: "localhost")     port: 1111, // the main port     replicas: [ // an array of replica databases         // every replica must define an host, the port is optional          {host: 'host2', port: 2222},         {host: 'host3', port: 3333}     ],     database: 'db', // the name of the database     options: { // an arbitrary object of connection options         w: 0,         readPreference: 'secondary'     } }

Todas as propriedades são opcionais, e você ainda pode usar um objeto vazio. O clássico mongodb://localhost será gerado como padrão nesse caso.

Como estamos acostumados com NPM, a instalação do módulo é tão fácil quanto executar:

npm install --save mongo-uri-builder

 

Em seguida, para usá-lo, você pode fazer algo parecido com isto:

var mongoUriBuilder = require('mongo-uri-builder');  var connectionString = mongoUriBuilder({       username: 'user',     password: 'pass',     host: 'host1',     port: 1111,     replicas: [         {host: 'host2', port: 2222},         {host: 'host3', port: 3333}     ],     database: 'db',     options: {         w: 0,         readPreference: 'secondary'     } });  console.log(connectionString);   // outputs "mongodb://user:pass@host1:1111,host2:2222,host3:3333/db?w=0&readPreference=secondary"

Bem fácil e “legível” não é? 🙂

Contribuições & issues

Como geralmente faço, coloquei o código do módulo no GitHub; você pode encontrar o repositório em lmammino / mongo-uri-construtor.

Todos são mais do que bem-vindos para contribuir com o projeto. Você pode contribuir apenas enviando bugs e solicitações de pull requests ou sugerir melhorias abrindo uma issue.

Finalizando

Este módulo é realmente algo ingênuo, mas é uma coisa agradável de ter, especialmente em conjunto com config, que me permite ter diferentes arquivos de configuração para cada ambiente (por exemplo, development e production) e para substituir as propriedades de um arquivo de configuração default.

Dessa forma, eu posso apenas substituir as partes da string de conexão que são efetivamente diferentes da configuração padrão. Posso até usar variáveis ​​de ambiente, por exemplo, se eu não quiser armazenar o nome de usuário e senha do meu banco de dados como um texto em um arquivo.

Eu estou realmente ansioso para saber o que você pensa sobre isso e se você achou útil. Claro que eu também espero que você esteja disposto a dar uma chance a ele em seu próximo projeto NodeJS.

Ah, sim, se você gostou, não se esqueça de compartilhar e dar uma “estrela” no Github e NPM!

Até a próxima!

***

Luciano Mammino faz parte do time de colunistas internacionais do iMasters. A tradução do artigo é feita pela redação iMasters, com autorização do autor, e você pode acompanhar o artigo em inglês no link: http://loige.co/introducing-mongo-uri-builder-a-nodejs-module-to-easily-create-mongodb-connection-strings-using-objects/