Manipulando arquivos INI com Node.js _

carbon (1)
carbon (1)

por João Oliveira

Sou programador freelancer e empresário há mais de 15 anos. Já trabalhei em mais de 1000 projetos diferentes em PHP, Node, Python, HTML, CSS e Javascript. Tenho clientes na Alemanha, no Peru e é claro, no Brasil.

O que é o formato INI?

O formato de arquivo INI é um padrão informal para arquivos de configuração para algumas plataformas ou software. Arquivos INI são arquivos de texto simples com uma estrutura básica composta de “seções” e “propriedades”. Caso queira saber mais, recomendo que siga a leitura neste artigo, lá você entenderá melhor sobre tais arquivos.

Este tipo de formato costuma ser utilizado para armazenar parâmetros mutáveis, ou seja, dados que podem ser alterados em um ambiente de produção, sem a necessidade de recompilar ou reiniciar seu servidor. Imagina um ambiente onde você precise armazenar endereços da web que podem ser alterados constantemente pelo administrador do sistema. Três classes utilizam a mesma URL. Imagine você ter que entrar no código fonte de cada uma para alterar? Muito trabalho desnecessário, não?

Obviamente você poderia utilizar o banco de dados para isso, mas nem sempre é a melhor escolha quando se trata de configurações. As vezes precisamos que as configurações operem independente da base de dados da aplicação.

Vamos ao que interessa.

gif de um gato em cima de um notebook

Os arquivos INI utilizam um formato extremamente simples para arquivos de configuração que consistem em seções, propriedades e valores. Vamos considerar um arquivo de configuração INI simples, armazenando tags.

[tags]	
tag1 = Exemplo de tag!
tag2 = Esta é a segunda tag..
tag3 = Quantas tags posso colocar nisso?

Criamos a seção tags, e nela possuímos chave e valor (chave => tag1, valor => “Exemplo de tag!”). Bem simples de se entender, né?

Agora imagine um arquivo de configuração:

[producao]
porta = 3306
ip = 192.168.1.2
admin = superAdminUser123

[desenvolvimento]

porta = 3307 ip = 192.168.1.1 admin = rafael

Neste exemplo fictício, temos duas seções: uma para um suposto ambiente de desenvolvimento e outra para de produção. Poderíamos separar diversas configurações dos ambientes dessa forma, facilitando nossa vida de dev.

Configuração inicial

Para começar, vamos instalar o excelente pacote ini. Primeiro, crie um projeto com o arquivo package.json padrão, se você ainda não tiver um:

$ npm init -y

Depois, vamos instalar o pacote responsável pelo INI:

$ npm install –save ini

Criando e lendo nosso primeiro arquivo INI

Primeiramente, vamos criar um arquivo INI  para armazenar algumas configurações. Vamos criar um arquivo simples com uma chave(website) e valor(uma url qualquer).

Arquivo de configuração INI
website = zerobugs.com.br

Salve o arquivo como “config.ini”. Vamos ler e analisar o arquivo de configuração INI e recuperar o valor de website:

Usamos a função require nas linhas 1-2 para importar os módulos fs e ini e utilizar em nosso programa. Na linha 4, usamos a função ini.parse com o fs para ler nosso arquivo de configuração config.ini. Armazenando este resultado em config, podemos simplesmente utilizar o objeto e recuperar nosso website com config.website. Bem simples, né?

Lendo dados de uma seção

Vamos usar o exemplo anterior onde temos uma seção de desenvolvimento e outra de produção:

[producao]
porta = 3306
ip = 192.168.1.2
admin = superAdminUser123

[desenvolvimento]

porta = 3307 ip = 192.168.1.1 admin = rafael

Vamos utilizar as mesmas funções para recuperar nosso arquivo:

O programa irá retornar o seguinte resultado:

{ porta: ‘3307’, ip: ‘192.168.1.1’, admin: ‘rafael’ }

Se trocarmos por console.log(config.producao):

{ porta: ‘3306’, ip: ‘192.168.1.2’, admin: ‘superAdminUser123’ }

Caso queiramos armazenar um dado específico do objeto, podemos fazer da seguinte forma:

No console deverá aparecer:

IP do servidor em produção: 192.168.1.2

Escrevendo em um arquivo INI

Agora vamos modificar nosso código para podermos escrever no arquivo. Adicione as seguintes linhas:

Alteramos o ip da seção desenvolvimento para “127.0.0.1” em seguida, alteramos a porta da produção para “3308”. Adicionamos uma nova chave chamada novaChave ao ambiente de produção com o valor “Esta é uma nova chave!”.

Por fim, chamamos uma função de escrita em arquivo, utilizando o fs. Para isso basta fazer fs.writeFileSync. Troquei o nome do arquivo para não sobrescrever o anterior, para que possamos visualizar a diferença nos dois arquivos. Como resultado teremos o seguinte arquivo:

[producao]
porta=3308
ip=192.168.1.2
admin=superAdminUser123
novaChave=Esta é uma nova chave!

[desenvolvimento]

porta=3307 ip=127.0.0.1 admin=rafael

Utilizando Arrays

Para finalizar, vamos dar uma olhada em como utilizar arrays em nossos arquivos de configuração.

Primeiro, vamos criar um arquivo INI com a seguinte estrutura:

[animais]
nomes[] = cachorro
nomes[] = gato
nomes[] = pássaro

Agora vamos recuperar os dados da seguinte forma:

Como resultado, teremos um array da seguinte forma: [ ‘cachorro’, ‘gato’, ‘pássaro’ ]

Conclusão

Os arquivos INI fornecem um formato muito simples de ser utilizado e altamente versátil, com aplicabilidade em diversas situações. Agora você já pode utilizar-los em suas aplicações Node.js, viu?

Você pode acessar o código fonte do tutorial aqui: https://github.com/raframil/nodejswithini.

Se você curtiu, deixa um like na nossa página e conheça nosso canal no Youtube. Estamos ativos e postando diversos tutoriais!

https://www.facebook.com/00bugs/