Cómo imprimir en la consola en Node.js

Cómo imprimir en la consola en Node.js

En esta oportunidad abordaremos cómo imprimir en la consola con Node.js. Primero explicaré un concepto básico en la programación para interactuar con las consolas/terminales, válido en muchos lenguajes de programación.

Básicamente existen tres flujos que nos permiten interactuar con la consola:

  1. Standard In (stdin) o flujo de entrada estándar: es el único flujo de entrada a un programa. Aquí se pasan los parámetros que un programa necesita para funcionar.
  2. Standard Out (stdout) o flujo de salida estándar: tiene como objetivo mostrarnos la salida/resultado de un programa ejecutado en la consola.
  3. Standard Error (stderr) o flujo de error estándar: muestra algún error que surja en el tiempo de ejecución del programa. Normalmente stderr usa el mismo flujo que stdout.

Requisitos

  1. Saber cómo inicializar un proyecto de Node.js.

El objeto Console

console es un objeto global en Node.js el cual nos ayuda a interactuar con la consola de una manera rápida, imprimiendo mensajes en consola en diferentes niveles:

  1. Mensaje común console.log("Hola Mundo").
  2. Mensaje informativo console.info("Base de datos conectada").
  3. Mensaje de advertencia console.warn("Este es un mensaje de advertencia").
  4. Mensaje de error console.error("Error, el objeto persona no tiene la propiedad email", persona).

Los anteriores métodos toman otros parámetros, no solo strings. Puedes imprimir variables y objetos para dar un mayor contexto acerca de lo que sucede en el programa.

Con estos métodos solo es posible acceder a la salida estándar stdout (log, debug, info) y la salida de error estándar stderr (error, warn). console no tiene un método para interactuar con la entrada estándar 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 del objeto Process

process es un objeto global que contiene las propiedades stdin, stdout, stderr con las cuales se puede acceder a los flujos estándar.

Aquí tenemos un ejemplo de cómo usar estas propiedades.

#!/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);
});

Lo que hace el programa es convertir la entrada estándar en mayúsculas y luego imprimirla en la consola.

La variable entrada es de tipo buffer, es decir una secuencia de bytes. Entonces convertimos esos bytes a un texto y luego lo convertimos en mayúsculas, después lo imprimimos en la consola y salimos del programa.

Nota que si introduces como entrada la palabra "error” vas a obtener un error que luego se imprimirá en pantalla y el programa detendrá su ejecución con un error.

Aquí hay un ejemplo de la salida que obtendríamos en los dos casos (el color azul significa que el programa se ejecutó con éxito y el rojo significa que se ejecutó con error):

Paquetes externos

Existen paquetes externos para Node.js con los cuales podemos generar detalles interesantes en la consola:

  1. Chalk: es un paquete para ponerle estilo al texto que imprimimos en consola. Puedes establecer algunos colores, así como que el texto sea negrita, cursiva o subrayado.
  2. Prompts: es un paquete que sirve para hacer flujos de entrada interactivos. Puedes solicitarle varias entradas al usuario (llamadas chains) e incluso que escoja entre algunas opciones preestablecidas por ti (como un select pero en consola).
  3. Y, por último, tenemos a Commander el cual te ayuda a crear los posibles parámetros de tu programa cuando un usuario lo ejecuta desde la consola, así como la ayuda de cómo usar el programa el cual es muy común que esté disponible mediante el flag --help.

Referencias

  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

⚠️
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Revelo.

Revelo Content Network da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.