Saltar al contenido principal

I/O básica en Node.js

El concepto E/S (entrada/salida) o I/O (input/output) en Node.js se refiere a las operaciones que permiten al programa leer y escribir datos fuera de la memoria del proceso, como archivos del sistema, argumentos de línea de comandos o datos de red. Node.js proporciona módulos nativos como fs y process que facilitan estas operaciones de forma asíncrona o síncrona.

El módulo fs

El módulo fs (file system) permite interactuar con el sistema de archivos. Se puede utilizar tanto de forma síncrona, donde el código espera a que termine la operación, como de forma asíncrona, que es más eficiente y no bloquea el event loop.

Ejemplo de lectura de archivo de forma asíncrona:

import fs from 'fs';

fs.readFile('archivo.txt', 'utf8', (error, datos) => {
if (error) {
console.error('Error al leer el archivo:', error.message);
return;
}
console.log('Contenido del archivo:', datos);
});

Ejemplo de escritura de archivo de forma asíncrona:

const contenido = 'Hola, Node.js!';
fs.writeFile('archivo.txt', contenido, (error) => {
if (error) {
console.error('Error al escribir el archivo:', error.message);
return;
}
console.log('Archivo escrito correctamente.');
});

Node.js también ofrece las versiones síncronas (readFileSync, writeFileSync), pero se recomienda usarlas solo en scripts pequeños o inicializaciones, ya que bloquean el hilo principal.

El objeto process

El objeto process proporciona información y control sobre el proceso actual de Node.js. Entre sus utilidades más comunes están el acceso a argumentos de línea de comandos, la finalización del proceso y la lectura de variables de entorno.

Ejemplo de argumentos de línea de comandos:

// Ejecutar: node app.js Ana 25
console.log(process.argv);
// ['ruta_node', 'ruta_app.js', 'Ana', '25']

const nombre = process.argv[2];
const edad = Number(process.argv[3]);
console.log(`Hola, ${nombre}. Tienes ${edad} años.`);

Otras funcionalidades de process:

  • process.exit(codigo): termina el proceso con un código de salida.
  • process.env: acceso a variables de entorno.
  • process.stdin y process.stdout: para leer y escribir datos desde la consola.

Buenas prácticas

Al trabajar con E/S en Node.js, se recomienda:

  • Preferir siempre la versión asíncrona de las operaciones de fs para no bloquear el event loop.
  • Manejar correctamente los errores en todas las operaciones de entrada/salida.
  • Validar y convertir los datos obtenidos de process.argv antes de utilizarlos.
  • Usar process.exit() solo cuando sea necesario, evitando cerrar el proceso abruptamente durante operaciones críticas.