Procesamiento de Streams en Node.js: Transformaciones y Lectura por Líneas

Clase 9 de 26Curso de Node.js Avanzado

Resumen

Node.js permite realizar operaciones eficientes con streams, una herramienta clave para mejorar el rendimiento al manejar grandes cantidades de datos. Conocer los tipos de streams disponibles, como lectura, escritura, duplex y transform, abre múltiples posibilidades. Una utilidad bastante práctica es la operación pipeline, que permite conectar varios procesos en una secuencia clara y controlada.

¿Qué tipos de streams hay y cómo funcionan?

Los streams pueden categorizarse en cuatro tipos principales:

  • Lectura: Para leer información desde una fuente.
  • Escritura: Para escribir información en un destino.
  • Duplex: Combinación que permite tanto leer como escribir simultáneamente.
  • Transform: Modifican los datos durante la transferencia.

¿Cómo transformar contenido usando streams?

Para convertir texto a mayúsculas usando streams, se utiliza un tipo de stream llamado transform, diseñado específicamente para modificar la información mientras fluye.

const { Transform, pipeline } = require('stream');
const fs = require('fs');

const toUpperCase = new Transform({
  transform(chunk, encoding, callback) {
    this.push(chunk.toString().toUpperCase());
    callback();
  }
});

pipeline(
  fs.createReadStream('entrada.txt'),
  toUpperCase,
  fs.createWriteStream('salida.txt'),
  (err) => {
    if (err) console.error('Error:', err);
  }
);

En esta operación:

  • Se lee un archivo (entrada.txt).
  • Se convierte su contenido a mayúsculas.
  • Se guarda el resultado en otro archivo (salida.txt).
  • Se maneja cualquier error posible correctamente.

¿Cómo leer archivos línea por línea con Node.js?

La utilidad readline permite procesar un archivo línea por línea de manera asíncrona, facilitando la lectura organizada, especialmente útil con archivos extensos.

const fs = require('fs');
const readline = require('readline');

async function leerLineas() {
  const fileStream = fs.createReadStream('contenido.txt');
  const rl = readline.createInterface({
    input: fileStream,
    crlfDelay: Infinity
  });

  try {
    for await (const line of rl) {
      console.log(line);
    }
  } catch (error) {
    console.error(error);
  }
}

leerLineas();

Este método permite:

  • Iterar sobre líneas individuales del archivo.
  • Realizar acciones específicas con cada línea leída, aquí mostradas en la consola.

¿Qué son y cómo funcionan los async iterables?

Los async iterables y for await simplifican el manejo de operaciones asíncronas, manteniendo orden en los resultados al crear procesos lineales y claros. En la práctica, esto permite procesar streams fácilmente en Node.js, conservando la estructura y secuencia del contenido.

¡Anímate a practicar combinando estos métodos! Puedes realizar una operación que lea líneas desde un archivo, transformarlas a mayúsculas y mostrarlas o guardarlas. Comparte cómo resolviste el ejercicio en los comentarios.