Node.js: Trabajar con directorios y archivos
En Node.js, el manejo de archivos y directorios es una de las tareas más comunes cuando tenemos aplicaciones que leen o escriben datos del sistema de archivos. En este artículo, aprenderás a trabajar con diferentes módulos para el manejo eficiente de archivos.
Módulos que usaremos
Los módulos que utilizaremos permiten interactuar con el sistema de archivos y manejar rutas de forma segura. Vienen incorporado con Node.js, así que no necesitas instalar nada extra.
1. Módulo fs
API tradicional basada en callbacks
1
const fs = require('fs');
2. Módulo fs/promises
API moderna basada en promesas
1
const fsPromises = require('fs/promises');
3. Módulo path - Ruta de archivos
Este módulo ayuda a construir rutas seguras que funcionen tanto en Windows como en Linux/macOS.
1
const path = require('path');
Crear directorios
Cualquiera sea el módulo, para crear un directorio usaremos el método mkdir
y en el siguiente ejemplo tenemos en la tab izquierda la forma tradicional con callbacks y en la derecha la forma moderna con promesas:
1 2 3 4 5 6
const fsLegacy = require('fs'); fsLegacy.mkdir('mi_carpeta', { recursive: true }, (err) => { if (err) throw err; console.log('Carpeta creada con fs (callback).'); });
1 2 3 4 5 6 7 8 9 10 11 12 13
const fsPromises = require('fs/promises'); async function crearDirectorio(nombre) { try { await fsPromises.mkdir(nombre, { recursive: true }); console.log(`Directorio '${nombre}' creado.`); } catch (err) { console.error('Error al crear el directorio:', err.message); } } crearDirectorio(__dirname + '/directorios'); crearDirectorio(__dirname + '/directorios/documentos');
Leer contenido de un directorio
1 2 3 4 5 6 7 8 9 10
async function leerDirectorio(ruta) { try { const archivos = await fsPromises.readdir(ruta); console.log(`Contenido de '${ruta}':`, archivos); } catch (err) { console.error('Error al leer el directorio:', err.message); } } leerDirectorio(__dirname + '/mis_notas');
Eliminar un directorio
1 2 3 4 5 6 7 8
async function eliminarDirectorio(ruta) { try { await fs.rm(ruta, { recursive: true, force: true }); console.log(`Directorio '${ruta}' eliminado.`); } catch (err) { console.error('No se pudo eliminar:', err.message); } }
recursive: true
permite eliminar carpetas incluso si tienen contenido.force: true
evita errores si la carpeta no existe.
Manejo seguro de rutas con path
Siempre que trabajes con archivos o carpetas, especialmente si usas rutas relativas o absolutas, utiliza path
para evitar errores entre los diferentes sistemas operativos:
1
2
const rutaCompleta = path.join(__dirname, 'mi_directorio', 'archivo.txt');
console.log('Ruta segura generada:', rutaCompleta);
Trabajar con directorios en Node.js es más simple de lo que parece, especialmente si usas el módulo basado en promesas fs/promises
y async/await
. Esto permite:
- Evitar el “callback hell”
- tener código más limpio y fácil de mantener
- Escribir scripts eficientes para la gestión de archivos