En este tema, aprenderemos a utilizar el módulo del sistema de archivos (fs) en Node.js. Este módulo nos permite interactuar con el sistema de archivos del servidor, lo que incluye la lectura, escritura, actualización y eliminación de archivos.
Contenido
- Introducción al módulo
fs
- Métodos de lectura de archivos
- Métodos de escritura de archivos
- Métodos de actualización de archivos
- Métodos de eliminación de archivos
- Ejercicios prácticos
- Introducción al módulo
fs
fs
El módulo fs
es uno de los módulos principales de Node.js y se utiliza para manejar el sistema de archivos. Para utilizar este módulo, primero debemos importarlo en nuestro archivo JavaScript.
- Métodos de lectura de archivos
fs.readFile()
El método fs.readFile()
se utiliza para leer el contenido de un archivo de manera asíncrona. Acepta tres parámetros: la ruta del archivo, la codificación y un callback que maneja el resultado.
fs.readFile('ruta/del/archivo.txt', 'utf8', (err, data) => { if (err) { console.error('Error leyendo el archivo:', err); return; } console.log('Contenido del archivo:', data); });
fs.readFileSync()
El método fs.readFileSync()
es la versión sincrónica de fs.readFile()
. Bloquea el hilo de ejecución hasta que la operación de lectura se completa.
try { const data = fs.readFileSync('ruta/del/archivo.txt', 'utf8'); console.log('Contenido del archivo:', data); } catch (err) { console.error('Error leyendo el archivo:', err); }
- Métodos de escritura de archivos
fs.writeFile()
El método fs.writeFile()
se utiliza para escribir datos en un archivo de manera asíncrona. Si el archivo no existe, se crea; si existe, se sobrescribe.
const contenido = 'Este es el contenido del archivo'; fs.writeFile('ruta/del/archivo.txt', contenido, 'utf8', (err) => { if (err) { console.error('Error escribiendo el archivo:', err); return; } console.log('Archivo escrito exitosamente'); });
fs.writeFileSync()
El método fs.writeFileSync()
es la versión sincrónica de fs.writeFile()
. Bloquea el hilo de ejecución hasta que la operación de escritura se completa.
const contenido = 'Este es el contenido del archivo'; try { fs.writeFileSync('ruta/del/archivo.txt', contenido, 'utf8'); console.log('Archivo escrito exitosamente'); } catch (err) { console.error('Error escribiendo el archivo:', err); }
- Métodos de actualización de archivos
fs.appendFile()
El método fs.appendFile()
se utiliza para agregar datos al final de un archivo de manera asíncrona. Si el archivo no existe, se crea.
const contenidoAdicional = '\nEste es el contenido adicional'; fs.appendFile('ruta/del/archivo.txt', contenidoAdicional, 'utf8', (err) => { if (err) { console.error('Error agregando contenido al archivo:', err); return; } console.log('Contenido agregado exitosamente'); });
fs.appendFileSync()
El método fs.appendFileSync()
es la versión sincrónica de fs.appendFile()
. Bloquea el hilo de ejecución hasta que la operación de actualización se completa.
const contenidoAdicional = '\nEste es el contenido adicional'; try { fs.appendFileSync('ruta/del/archivo.txt', contenidoAdicional, 'utf8'); console.log('Contenido agregado exitosamente'); } catch (err) { console.error('Error agregando contenido al archivo:', err); }
- Métodos de eliminación de archivos
fs.unlink()
El método fs.unlink()
se utiliza para eliminar un archivo de manera asíncrona.
fs.unlink('ruta/del/archivo.txt', (err) => { if (err) { console.error('Error eliminando el archivo:', err); return; } console.log('Archivo eliminado exitosamente'); });
fs.unlinkSync()
El método fs.unlinkSync()
es la versión sincrónica de fs.unlink()
. Bloquea el hilo de ejecución hasta que la operación de eliminación se completa.
try { fs.unlinkSync('ruta/del/archivo.txt'); console.log('Archivo eliminado exitosamente'); } catch (err) { console.error('Error eliminando el archivo:', err); }
- Ejercicios prácticos
Ejercicio 1: Leer y escribir archivos
Instrucciones:
- Crea un archivo llamado
input.txt
con algún contenido de texto. - Escribe un programa en Node.js que lea el contenido de
input.txt
y lo escriba en un nuevo archivo llamadooutput.txt
.
Solución:
const fs = require('fs'); fs.readFile('input.txt', 'utf8', (err, data) => { if (err) { console.error('Error leyendo el archivo:', err); return; } fs.writeFile('output.txt', data, 'utf8', (err) => { if (err) { console.error('Error escribiendo el archivo:', err); return; } console.log('Contenido copiado exitosamente'); }); });
Ejercicio 2: Actualizar un archivo
Instrucciones:
- Crea un archivo llamado
log.txt
con algún contenido inicial. - Escribe un programa en Node.js que agregue una nueva línea de texto a
log.txt
cada vez que se ejecute.
Solución:
const fs = require('fs'); const nuevaEntrada = `Nueva entrada de log: ${new Date().toISOString()}\n`; fs.appendFile('log.txt', nuevaEntrada, 'utf8', (err) => { if (err) { console.error('Error agregando contenido al archivo:', err); return; } console.log('Nueva entrada de log agregada exitosamente'); });
Conclusión
En este tema, hemos aprendido a utilizar el módulo del sistema de archivos (fs
) en Node.js para realizar operaciones de lectura, escritura, actualización y eliminación de archivos. Estos conocimientos son fundamentales para cualquier desarrollador que trabaje con Node.js, ya que permiten interactuar con el sistema de archivos del servidor de manera eficiente y efectiva.
En el próximo tema, exploraremos cómo trabajar con Streams en Node.js, lo que nos permitirá manejar grandes volúmenes de datos de manera más eficiente.
Curso de Node.js
Módulo 1: Introducción a Node.js
Módulo 2: Conceptos Básicos
Módulo 3: Sistema de Archivos y E/S
Módulo 4: HTTP y Servidores Web
- Creando un Servidor HTTP Simple
- Manejo de Solicitudes y Respuestas
- Sirviendo Archivos Estáticos
- Enrutamiento
Módulo 5: NPM y Gestión de Paquetes
- Introducción a NPM
- Instalación y Uso de Paquetes
- Creación y Publicación de Paquetes
- Versionado Semántico
Módulo 6: Framework Express.js
- Introducción a Express.js
- Configuración de una Aplicación Express
- Middleware
- Enrutamiento en Express
- Manejo de Errores
Módulo 7: Bases de Datos y ORMs
- Introducción a las Bases de Datos
- Usando MongoDB con Mongoose
- Usando Bases de Datos SQL con Sequelize
- Operaciones CRUD
Módulo 8: Autenticación y Autorización
- Introducción a la Autenticación
- Usando Passport.js
- Autenticación JWT
- Control de Acceso Basado en Roles
Módulo 9: Pruebas y Depuración
- Introducción a las Pruebas
- Pruebas Unitarias con Mocha y Chai
- Pruebas de Integración
- Depuración de Aplicaciones Node.js
Módulo 10: Temas Avanzados
- Módulo Cluster
- Hilos de Trabajo
- Optimización del Rendimiento
- Construcción de APIs RESTful
- GraphQL con Node.js
Módulo 11: Despliegue y DevOps
- Variables de Entorno
- Usando PM2 para la Gestión de Procesos
- Desplegando en Heroku
- Integración y Despliegue Continuos