Uma necessidade comum que temos ao desenvolver aplicações é alterar variáveis dinamicamente durante a inicialização da nossa aplicação.

Em muitos casos, é necessário informar os dados de acesso a bancos de dados, chaves de algum serviço externo, strings de criptografia, entre outras variáveis para nossa aplicação e geralmente, estes dados mudam nos ambiente.

Existem algumas maneiras de atender este requisito, hoje vou compartilhar uma primeira dica em NodeJS, que além de ser uma boa prática, vai tornar seu código imutável e seguro, independente do ambiente que você inicialize sua app (dev, homolog ou production).

Nossa solução consiste em usarmos variáveis de ambiente e acessa-las com o módulo dotenv.

Passo 1: Adicione o módulo dotenv a nossa app nodejs, execute o comando:

npm install dotenv --save

Passo 2: Crie um arquivo a extensão “.env” na raiz da sua app e adicione o conteúdo:

NODE_ENV = 'homolog'
PASSWORD = 'pwdHmg'

Passo 3: Inicialize o dotenv na sua aplicação, se você tem algum arquivo onde é definido as variáveis do seu app, você pode inicializar nele.

Exemplo de um arquivo contendo as variáveis lendo as variáveis que definimos no arquivo .env: config.js

require('dotenv').load()

params = {
  env: process.env.NODE_ENV,
  password: process.env.PASSWORD
}

module.exports = params

Para evitar o acesso de uma variável de produção, também podemos validar o ambiente definido no arquivo:

if(process.env.NODE_ENV == 'production') {
  console.log("Variáveis de produção")
} else if(process.env.NODE_ENV !== 'homolog'){
  console.log("Variáveis de homologação")  
} else {
  console.log("Variáveis em desenvolvimento ou não definidas")
}

Está primeira dica apesar de simples, vai ajudar a deixar seu código fonte mais independente, flexível e seguindo uma boa prática.

Na próxima dica vou explicar como você pode usar o AWS Key Management Service (KMS), uma solução mais completa e segura para você gerenciar e armazenar as chaves da sua aplicação.

O KMS da Amazon Webservices é uma alternativa que utilizo em minhas aplicações, por estar acessível pelos SDKs, não preciso adicionar módulos de terceiros e ainda posso compartilhar com outros serviços da AWS.

Até logo! 🙂