Usando variáveis de ambiente no Node.js

As variáveis de ambiente (environment variables) são aquelas definidas fora do código de nossa aplicação, mas que mesmo assim podemos fazer uso delas.

Elas são armazenadas como ‘chave-valor’ num arquivo em separado, do tipo texto, que pode ser facilmente editado, de acordo com a nossa conveniência, sendo bastante úteis para configuração de ambiente operacional, onde podemos guardar definições de caminhos de arquivos, bancos de dados, URL, chaves de autenticação etc., pois seus valores podem ser alterados a qualquer momento, sem que precisemos recompilar a aplicação.

No Node.js podemos facilmente utilizar essas variáveis através do objeto process.env, que é um objeto global e, por isso, pode ser acessado em qualquer módulo da aplicação.

Existem várias formas para definição e leitura de variáveis de ambiente, mas neste artigo trataremos do uso do pacote dotenv, um módulo de dependência que carrega as variáveis de ambiente a partir de um arquivo texto externo à aplicação diretamente no objeto global process.env do Node.js.

A instalação pode ser feita usando o npm ou yarn, conforme comandos a seguir:

Figura 1. Comando de instalação do pacote dotenv usando o NPM.
Figura 2. Comando de instalação do pacote dotenv usando o Yarn.

Após a instalação do pacote dotenv na pasta raiz do projeto, devemos criar um arquivo chamado .env, que armazenará nossas variáveis de ambiente, conforme figura 3.

Figura 3. Aspecto de uma estrutura de projeto Node.js, onde vemos o arquivo .env na pasta raiz do projeto e seu conteúdo.

👉 Por convenção, uma variável de ambiente deve ser escrita com letras maiúsculas e seu valor não deve estar entre aspas.

No arquivo de definição da aplicação (app.ts, por exemplo) importamos o módulo dotenv usando um require antes de qualquer outro código, conforme código da figura 4.

Figura 4. Típico arquivo app.ts, onde importamos o módulo dotenv usando o require.

Com a importação do módulo dotenv, podemos ler qualquer variável de ambiente contida no arquivo .env, a partir do objeto process.env, conforme código de exemplo contido na figura 5, onde lemos a variável de ambiente HTTP_PORT.

Figura 5. Leitura da variável de ambiente HTTP_PORT, a partir de process.env.

⚠️ Para concluir, é importante lembrar do cuidado em se armazenar dados sensíveis no arquivo .env, como senhas de bancos de dados e chaves de criptografia. Por essa razão é altamente recomendável incluir a referência ao arquivo .env no arquivo .gitignore.

Renomeando arquivos de banco de dados no SQL Server

Renomear arquivos de bancos de dados no SQL Server não é como renomear um arquivo .DOCX do Word. Alguns procedimentos precisam ser seguidos para preservar a integridade do banco de dados. Abaixo descrevo como eu realizo tais procedimentos.

Primeiramente, no SQL Server Management Studio, renomeio o banco de dados desejado diretamente no Object Explorer, utilizando o menu de contexto, conforme figura 1.

Figura 1. Renomeando o banco de dados no Object Explorer do SSMS.

Após a execução do comando, o banco de dados deverá ser exibido com o novo nome, conforme figura 2.

Figura 2. Banco de dados renomeado no Object Explorer do SSMS.

Se isso fosse o bastante seria bom demais. Mas não é assim que funciona (a não ser que você não se importe em ter um nome físico do arquivo de banco de dados diferente do nome apresentado no Object Explorer, o que não é o meu caso). Meu desejo é ter o mesmo nome do banco de dados, tanto lógica como fisicamente, então o primeiro passo já foi feito. Vamos em frente!

Antes, porém, vou mostrar que apenas o procedimento acima não foi o bastante resolver a questão. Para isso, novamente no Object Explorer, utilizo o menu de contexto para exibir as propriedades do banco de dados que acabei de renomear, conforme figura 3.

Figura 3. Exibindo as propriedades do banco de dados no SSMS.

A janela de propriedades do banco de dados é apresentada. Clique na opção Files e preste atenção aos detalhes na figura 4.

Figura 4. Database Properties.

Mesmo indicando que as propriedades são do banco de dados renomeado para NOVO_NOME, as propriedades Logical Name e File Name permanecem como antes: NOME_ATUAL.

Depois de muito pesquisar, encontrei uma dica na Internet num post de 2009 do blog dba-sqlserver.blogspot.com e foi dessa dica que consegui resolver o meu problema e publicar este post.

💡 Dica: O script abaixo exibe os nomes lógico e físico do banco de dados.

Figura 5. Script para mostrar os nomes lógico e físico do banco de dados.

Repare que mesmo já tendo alterado o nome do banco de dados para NOVO_NOME, via Object Explorer, o resultado da execução do script acima mostra que os nomes lógico e físico ainda se mantêm como antes.

Figura 6. Resultado da execução do script para mostrar os nomes lógico e físico do banco de dados.

Partindo para a resolução do problema, os procedimentos, a partir deste ponto, são divididos em três fases: 

Fase 1 – Execução do script abaixo.

Figura 7. Script para definir novos nomes para os arquivos de dados e log do banco de dados.

Fase 2 – Renomeação dos arquivos .MDF e .LDF usando os comandos para renomear arquivos do Windows, via Windows Explorer ou Prompt de Comando.  

Fase 3 – Execução do script abaixo.

Figura 8. Script para reativar o banco de dados após renomeados os arquivos físicos.

Pronto! Se tudo ocorreu bem, ao executar novamente o script da figura 5 o resultado final deverá ser mostrado conforme imagem abaixo.

Figura 9. Resultado final mostrando os arquivos devidamente renomeados.

Este foi meu primeiro post sobre minha experiência como DBA usando o SQL Server. Que seja o primeiro de muitos outros que possam agregar conhecimento a respeito deste fantástico sistema gerenciador de bancos de dados.

Ingenuity faz história: o primeiro voo em Marte

Mais um marco histórico da genialidade humana na exploração espacial. A NASA confirmou que realizou com sucesso o primeiro voo de um artefato humano em outro planeta nesta segunda-feira, 19/04/2021.

O voo do Ingenuity foi autônomo. Ele voou por sistemas de orientação, navegação e controle a bordo, executando algoritmos desenvolvidos pela equipe do JPL da NASA.

Sombra do Ingenuity projetada no solo marciano quando planava a 3 metros de altura.

Como os dados devem ser enviados e devolvidos do Planeta Vermelho ao longo de centenas de milhões de quilômetros usando satélites em órbita e a Rede de Espaço Profundo da NASA, o Ingenuity não pode ser pilotado com um joystick, e seu voo não foi observável da Terra em tempo real.

Primeiro voo em Marte com o Ingenuity.

Outro fato também histórico: Na semana passada, durante os testes iniciais, um problema no software fez com que o helicóptero não conseguisse atingir a rotação mínima de 2400 rpm necessária para realização do voo. Corrigido o problema no algoritmo aqui na Terra, foi realizado o primeiro upload de uma versão completa de controle de um artefato em outro planeta, a uma taxa de transmissão de 0,4 Mbps. Depois dos testes no final de semana, o Ingenuity conseguiu atingir os requisitos, ficando pronto para o voo inaugural que aconteceu hoje.

De parabéns a NASA por mais uma missão inédita com sucesso e que, com certeza, abrirá as portas para novas missões com fins específicos de realização de sobrevoos em Marte.