Transformación de archivos con streams en Node.js
Clase 9 de 26 • Curso de Node.js Avanzado
Resumen
El manejo eficaz de streams en Node.js permite transformar rápidamente contenido de archivos usando métodos como transform y pipeline. Con esta guía práctica aprenderás cómo implementar una secuencia de procesos que leen, transforman y escriben información de forma eficiente y clara.
¿Qué es un stream de tipo transform en Node.js?
En Node.js, un stream tipo transform recibe datos, los procesa y entrega la información modificada. Para crear tu stream personalizado, utiliza la clase Transform
proporcionada por el módulo stream.
¿Cómo funciona un stream transform en práctica?
La creación básica del stream transform emplea una función que procesa información entrante y la transforma:
const { Transform } = require('stream');
const toUpperCase = new Transform({
transform(chunk, encoding, callback) {
this.push(chunk.toString().toUpperCase());
callback();
}
});
Este ejemplo convierte todos los fragmentos (chunks) de texto en mayúsculas al recibirlos.
¿Cómo definir un pipeline de streams en Node.js?
Un pipeline encadena diferentes streams, pasando automáticamente el resultado de un stream como entrada al siguiente. Esto simplifica la gestión del flujo de datos y detección de errores.
¿Cuáles son los pasos para crear un pipeline?
- Leer un archivo con un stream de lectura.
- Pasar los datos por el stream transform definido previamente.
- Escribir el resultado en un nuevo archivo usando un stream de escritura.
Ejemplo práctico en Node.js:
const { pipeline } = require('stream');
const fs = require('fs');
pipeline(
fs.createReadStream('entrada.txt'),
toUpperCase,
fs.createWriteStream('salida.txt'),
(err) => {
if (err) console.error('Error en pipeline:', err);
}
);
Este proceso se encarga de leer fracciones del archivo original, transformarlas en mayúsculas y escribirlas en un nuevo archivo automáticamente.
¿Cómo se administran errores en pipelines?
La gestión de errores es esencial al trabajar con streams, especialmente en procesos asíncronos. El mecanismo incorporado en pipeline facilita detectar y reportar estos errores mediante funciones callback.
¿Cómo leer archivos por líneas usando streams?
Para lecturas más organizadas que procesan archivos línea por línea, Node.js ofrece el módulo readline
. Este módulo trabaja junto al sistema de streams para facilitar el procesamiento por líneas:
const fs = require('fs');
const readline = require('readline');
async function leerLineas() {
const fileStream = fs.createReadStream('contenido.txt');
const rl = readline.createInterface({ input: fileStream });
for await (const linea of rl) {
console.log(linea);
}
}
leerLineas().catch(console.error);
Este método permite una lectura ordenada y secuencial, fundamental para algunos procesos específicos.
¿Qué ventajas aporta utilizar streams y pipelines?
Utilizar estas funcionalidades permite realizar tareas que implican grandes cantidades de información:
- Eficiencia considerable al trabajar con grandes datos.
- Flexibilidad para encadenar distintas operaciones como lectura, transformación y escritura.
- Facilidad para gestionar flujos asíncronos y controlar errores efectivamente.
Comparte en los comentarios cómo solucionaste la tarea sugerida por el instructor combinando lecturas por línea y transformaciones a mayúscula.