Nuestro primer script con Node.js: leer y escribir archivos
Hasta ahora ya hemos ejecutado Node.js y entendido su sistema de módulos. En esta clase damos un paso clave: crear nuestro primer script real, interactuando directamente con el sistema operativo.
Vamos a ver por qué Node.js es tan potente para tareas de scripting y automatización.
Los módulos nativos de Node.js
Una de las grandes ventajas de Node.js es que incluye módulos nativos que nos permiten interactuar con el sistema sin necesidad de instalar librerías externas:
- 📂 Sistema de archivos (
node:fs) - 📁 Carpetas (
node:fs) - 🌐 Red (
node:http,node:https,node:net) - ⚙️ Procesos (
node:process) - ⌨️ Entrada y salida (
node:readline)
En esta clase nos centramos en el módulo fs (File System), concretamente en su versión basada en promesas.
Leer archivos del sistema
Vamos a crear un script que lea el contenido de un archivo de texto. Para ello usamos el módulo nativo de Node.js:
import { readFile } from 'node:fs/promises'
Este módulo nos permite leer archivos de forma asíncrona y sencilla.
Leer un archivo de texto
Al leer un archivo, es importante indicar la codificación para no recibir un buffer binario (ceros y unos que Node.js no sabe cómo interpretar como texto):
const content = await readFile('./archivo.txt', 'utf-8')
console.log(content)
De esta forma obtenemos directamente el texto legible del archivo.
Cuidado: acceso total al sistema Node.js puede leer cualquier archivo del sistema si tiene permisos. Esto es muy potente, pero también peligroso: puedes acceder a cualquier ruta o leer información sensible. Más adelante veremos cómo limitar esto usando el sistema de permisos de Node.js.
Escribir archivos con Node.js
Una vez leído el contenido, podemos transformarlo y guardarlo en un nuevo archivo. Por ejemplo, vamos a convertir todo el texto a mayúsculas y escribirlo en un archivo diferente:
import { writeFile } from 'node:fs/promises'
const upperContent = content.toUpperCase()
await writeFile('./archivo-uppercase.txt', upperContent)
Este método crea un nuevo archivo automáticamente si no existe, o sobrescribe el contenido si ya existía.
Crear carpetas de forma recursiva
Node.js también permite crear carpetas, incluso estructuras completas de directorios en una sola línea. Usamos mkdir con la opción recursive:
import { mkdir } from 'node:fs/promises'
await mkdir('output/files/documents', { recursive: true })
Si la carpeta no existe, Node.js la crea junto con todas sus carpetas padre.
Escribir archivos dentro de carpetas creadas
Una vez creada la estructura, podemos guardar archivos directamente dentro:
await writeFile('output/files/documents/archivo-uppercase.txt', upperContent)
El flujo completo queda claro:
- Leemos un archivo.
- Transformamos su contenido.
- Creamos carpetas si no existen.
- Guardamos el resultado en una nueva ubicación.
Por qué Node.js es ideal para scripts
Este tipo de programas muestran el verdadero poder de Node.js más allá de crear servidores web:
- 🛠️ Scripts de transformación de archivos.
- 🤖 Automatizaciones de tareas repetitivas.
- 📊 Procesamiento de datos.
- 📝 Generadores de contenido.
- 🔧 Herramientas internas y CLIs.
No solo Python sirve para scripting. Node.js es igual de versátil y muy cómodo si ya dominas JavaScript.
¡Lo aprendido en esta clase!
En esta clase has aprendido a:
- ✅ Usar módulos nativos de Node.js (con el prefijo
node:). - ✅ Leer archivos de forma asíncrona con promesas.
- ✅ Escribir archivos nuevos y transformar contenido.
- ✅ Crear carpetas recursivas con
mkdir. - ✅ Entender por qué Node.js es una herramienta excelente para scripting.
Este es el primer paso para usar Node.js más allá del navegador. En la siguiente clase seguiremos profundizando en Node.js y sentaremos las bases para empezar a construir un backend de verdad.