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.stdinyprocess.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
fspara no bloquear el event loop. - Manejar correctamente los errores en todas las operaciones de entrada/salida.
- Validar y convertir los datos obtenidos de
process.argvantes de utilizarlos. - Usar
process.exit()solo cuando sea necesario, evitando cerrar el proceso abruptamente durante operaciones críticas.