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:
- 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.
- Standard Out (stdout) ou fluxo de saída padrão: seu objetivo é nos mostrar a saída/resultado de um programa executado no console.
- 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
- 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:
- Mensagem comum
console.log("Hola Mundo")
. - Mensagem informativa
console.info("Base de datos conectada")
. - Mensagem de aviso
console.warn("Este es un mensaje de advertencia")
. - 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:
- 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.
- 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).
- 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
- Sobre
console
: https://nodejs.org/docs/latest-v18.x/api/console.html - Sobre
process
: https://nodejs.org/docs/latest-v18.x/api/process.html#processstderr
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.