Como imprimir no console em Node.js

Como imprimir no console em Node.js

Desta vez, abordaremos como imprimir no console com Node.js. Primeiramente irei explicar um conceito básico de programação para interagir com consoles/terminais, válido em diversas linguagens de programação.

Basicamente existem três fluxos que nos permitem interagir com o console:

  1. Standard In (stdin) ou fluxo de entrada padrão: é o único fluxo de entrada para um programa. Aqui você passa os parâmetros que um programa precisa para funcionar.
  2. Standard Out (stdout) ou fluxo de saída padrão: seu objetivo é nos mostrar a saída/resultado de um programa executado no console.
  3. Standard Error (stderr) ou fluxo de erro padrão: mostra quaisquer erros que surjam no momento da execução do programa. Normalmente stderr usa o mesmo fluxo que stdout.

Requisitos

  1. Saber como inicializar um projeto Node.js.

O objeto Console

console é um objeto global em Node.js que nos ajuda a interagir com o console de forma rápida imprimindo mensagens para o console em diferentes níveis:

  1. Mensagem comum console.log("Hola Mundo").
  2. Mensagem informativa console.info("Base de datos conectada").
  3. Mensagem de aviso console.warn("Este es un mensaje de advertencia").
  4. Mensagem de erro console.error("Error, el objeto persona no tiene la propiedad email", persona).

Os métodos acima usam outros parâmetros, não apenas strings. Você pode imprimir variáveis ​​e objetos para dar mais contexto sobre o que está acontecendo no programa.

Com esses métodos só é possível acessar a saída padrão stdout (log, debug, info) e a saída de erro padrão stderr (error, warn). console não tem um método para interagir com a entrada padrão stdin.

console.log("Hola Mundo");

console.info("Base de datos conectada");

console.warn("Este es un mensaje de advertencia");

const persona = { nombre: "Fulano", apellido: "De tal" };
const err = new Error("Error, el objeto persona no tiene la propiedad email");
console.error(persona, err);

Métodos de objeto Process

process é um objeto global que contém as propriedades stdin, stdout, stderr com o qual você pode acessar os fluxos padrão.

Aqui está um exemplo de como usar essas propriedades:

#!/bin/env node

process.stdin.on("data", (entrada) => {
  const texto = entrada.toString("utf8");

  if (texto.includes("error")) {
    process.stderr.write(`Error: El Texto es ${texto}\n`);
    process.exit(1);
  }

  const salida = texto.toUpperCase();
  process.stdout.write(`${salida}\n`);
  process.exit(0);
});

O que o programa faz é converter a entrada padrão para maiúsculas e, em seguida, imprimi-la no console.

A variável entrada é tipo buffer, ou seja, uma sequência de bytes. Então, convertemos esses bytes em texto e, em seguida, convertemos em letras maiúsculas, depois imprimimos no console e saímos do programa.

Observe que se você inserir a palavra "error" como entrada, receberá um erro que será impresso na tela e o programa interromperá a execução com um erro.

Aqui está um exemplo da saída que obteríamos em ambos os casos (cor azul significa que o programa foi executado com sucesso e vermelho significa que foi executado com erro):


Pacotes externos

Existem pacotes externos para Node.js com os quais podemos gerar detalhes interessantes no console:

  1. Chalk é um pacote para estilizar o texto que imprimimos no console. Você pode definir algumas cores, bem como tornar o texto em negrito, itálico ou sublinhado.
  2. Prompts é um pacote para tornar os fluxos de entrada interativos. Você pode solicitar vários inputs do usuário (chamados chains) e até mesmo pedir para ele escolher entre algumas opções pré-estabelecidas por você (como um select mas no console).
  3. E, finalmente, temos Commander que ajuda você a criar os possíveis parâmetros do seu programa quando um usuário o executa a partir do console, além de ajudar na forma de usar o programa que é muito comum estar disponível através do flag --help.

Referências

  1. Sobre console: https://nodejs.org/docs/latest-v18.x/api/console.html
  2. Sobre process: https://nodejs.org/docs/latest-v18.x/api/process.html#processstderr

⚠️
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.