Hello World, Deno! - Parte 4 - Visitando APIS Nativas

Escrevendo em arquivos com JavaScript utilizando as APIs Nativas de Deno ūü¶ē

Escrito por Myreli em August 23, 2020 · 7 mins de leitura

E aí, tudo joia?

Na publicação anterior implementamos a comunicação com uma API externa de forma super rápida e prática. Agora, vamos fazer outra tarefa muito comum no desenvolvimento: acessar o sistema de arquivos e escrever neles.

Essa é a quarta parte de uma série de artigos sobre Deno:

  1. Hello World, Deno! - Parte I disponível
  2. Hello World, Deno! - Iniciando uma aplicação - Parte II disponível
  3. Hello World, Deno! - Visitando APIs Web - Parte III disponível
  4. Hello World, Deno! - Visitando APIS Nativas - Parte IV você está aqui
  5. Hello World, Deno! - Considera√ß√Ķes finais Parte V dispon√≠vel

Por que escrever em arquivos?

A proposta da nossa aplicação é simples: recebe o nome de um aluno, conversa com o Chapéu Seletor e mostra a casa selecionada para esse aluno.

Mas, na vida real, nada √© simples - internet cai, Voldemort querendo voltar, J.K. Rowling destruindo tudo rs‚Ķ e √© nosso trabalho, enquanto desenvolvedores, garantir que ainda que o mundo acabe, as aplica√ß√Ķes permane√ßam intactas. Ou, pelo menos, os registros delas.

A forma mais comum de fazer isso é registrando todos os eventos da aplicação para consulta futura, os chamados logs. E bons logs são essenciais para evitar ser o Tom em Tom e Jerry.

[Debugging Meme By Java Assignment Help On Pinterest](https://br.pinterest.com/pin/44402746315403380/?d=t&mt=login)

Falar é fácil, cadê o código?

As APIs Nativas do Deno provem uma função Deno.writeTextFile que faz justamente isso.

Abra uma aba no terminal e entre no console interativo deno e experimente:

Deno.writeTextFile("./arquivo.txt", "tao facil?")

Uma Promise (no momento do retorno, em estado pendente) é retornada porque estamos utilizando a função assíncrona para escrita em arquivos. Pode fechar o console interativo ctrl d.

Se verificar o sistema de arquivos, vai ver que foi criado seu arquivo arquivo.txt no diretório atual. Bora abrir?

E t√° a√≠ minha gente! F√°cil e lindo! ūüôā

Criando o arquivo de logs

Na √ļltima vers√£o do nosso c√≥digo, dentro do arquivo log.service.ts n√≥s deixamos pronta a estrutura de uma fun√ß√£o:

export default async (student: String, house: String) => {
    console.debug('registrando', student, house, Date.now())
}  

O que precisamos agora é registrar esses dados, de fato, em um arquivo. Mas como?

Vamos simplesmente trazer aquele código que construímos no console interativo para a nossa função, adaptando para o nosso caso de uso:

export default async (student: String, house: String) => {
    console.debug('registrando', student, house, Date.now())
    Deno.writeTextFile(
        "./app.log",
        `${new Date().toISOString()} | ${student} nomeado para ${house}`
    )
}

Na hora de executar, da mesma forma que precisamos permitir o endereço da API, precisamos permitir a escrita de arquivos com a flag allow-write.

Que delícia, né?

Editando um arquivo

Agora, tem um detalhe muito importante. Se você executar o programa novamente, vai ver que uma coisa indesejada acontece.

Somente o √ļltimo registro est√° sendo salvo:

Em um cenário de arquivo de logs, queremos que todos os registros de todos os tempos sejam salvos. E isso é bem simples, basta passar a configuração append: true para o Deno, assim:

export default async (student: String, house: String) => {
    console.debug('registrando', student, house, Date.now())
    return Deno.writeTextFile(
        "./app.log",
        `${new Date().toISOString()} | ${student} nomeado para ${house}\n`,
        { append: true }
    )
}

Eu também incluí uma quebra de linha no fim do registro, para que cada inserção fique separada em uma linha. Agora sim:

Próximos Passos

Terminamos, galera! Todo o fluxo planejado foi desenvolvido, de forma muito rápida e em pouquíssimas linhas de código:

  1. Qualquer aluno pode executar o programa enviando seu nome
  2. Deno está acessando a internet e coletando a decisão do Chapéu Seletor
  3. Por quest√Ķes de seguran√ßa e auditoria de Hogwarts estamos salvando tudo em um arquivo de log

No pr√≥ximo artigo, para encerrar a s√©rie, vou listar algumas coisas bacanas como a configura√ß√£o de Deno no VSCode, como fazer testes unit√°rios e outras fun√ß√Ķes muito maneiras para melhorar a nossa vida.

Todo o código que criamos hoje está disponível no Github.

De verdade, essa foi uma das melhores experiências de desenvolvimento que eu já tive de forma nativa em uma tecnologia. Deno conseguiu me convencer de que existem boas experiências para os devs que gostam de criar scripts rápidos fora do universo mágico de Python.

Muito obrigada! Espero que tenha sido uma leitura bacana.

Até a próxima!


Quer mais artigos como este direto na caixa de entrada?