Como resolver problemas com a lib dotenv (nodejs)

Como resolver problemas com a lib dotenv (nodejs)

As vezes ao utilizar a lib dotenv em alguns ambientes a leitura de variáveis de ambiente não funciona corretamente. É comum vermos o problema logo ao tentar fazer a primeira conexão ao banco. Segue um exemplo:

error: password authentication failed for user "ubuntu"

Neste caso então temos que debugar e descobrir o motivo de nossas variáveis de ambiente não serem carregadas, neste tutorial vamos mostrar alguma alternativas de como podemos debugar e resolver este problema.

Isso ocorre quando o valor da variável não está definido ou não é uma string válida por questões de codificação no arquivo (ex. o arquivo pode não estar no encoding correto).

Uma maneira de depurar se o seu arquivo .env está carregando as variáveis de ambiente devidamente é utilizando o console.log.

Para fazer essa verificação e confirmar se os valores estão sendo carregados devidamente, faça o seguinte, logo após a chamada à função config(), coloque um console.log para exibir em tela o conteúdo da variável process.env.

Em código ficaria assim:

require('dotenv').config();
console.log(process.env) // remova após confirmar que está funcionando

Verifique se os valores estão sendo carregados do arquivo .env corretamente.

Um exemplo do que seria mostrado em tela caso estiver tudo funcionando conforme esperado (neste caso a lib dotenv foi capaz de ler o conteúdo do arquivo .env com sucesso):


PORT: '3000',
PGHOST: 'localhost',
PGPORT: '5432',
PGDATABASE: 'xxxxx',
PGUSER: 'postgres',
PGPASSWORD: 'xxxxx',
PAGINATIONSIZE: '25',
PATH_PREFIX: '/api/',
NODE_ENV: 'development'

Não tenho certeza qual o diretório devo colocar o meu arquivo .env

Neste caso a melhor abordagem é passar um caminho absoluto da localização do seu arquivo .env. É possível passar o caminho absoluto para o seu arquivo .env passando como argumento o valor path para a função config(), da seguinte forma:

require('dotenv').config({ path: '/caminho/para/seu/.env' });

Meu arquivo não utiliza utf-8 como encoding no arquivo .env

Neste caso a biblioteca também trata esses arquivos, basta passar outro  argumento do parâmetro encoding na função config() da seguinte forma:

require('dotenv').config({ encoding: 'latin1' })

O problema ainda persiste

Neste caso a melhor solução é ligar o modo debug da lib 'dotenv'.

Isso é possível da seguinte forma:

require('dotenv').config({ debug: true });

Assim terá mensagens mais inteligíveis de onde procurar pelo erro e identificar qual a causa raiz do problema.

Eu simulei um problema em minha aplicação, aqui eu removi o arquivo .env do diretório correto. E esta foi a mensagem que apareceu quando eu habilitei o modo debug.

[dotenv][DEBUG] Failed to load /home/usuario/app/.env ENOENT: no such file or directory, open '/home/usuario/app/.env'

Todas as informações contidas aqui estão disponíveis na documentação da biblioteca dotenv