Leer/escribir archivos de forma segura

Trabaja con archivos en Node sin bloquear el event loop, validando rutas y controlando errores de lectura y escritura.

Leer y escribir archivos parece simple, pero hay riesgos de rendimiento y seguridad.

Usa `fs/promises` y valida rutas para evitar bloqueos y accesos indebidos.

Un script robusto debe manejar inexistencia de archivos y permisos denegados.

Meta: construir utilidades de archivos confiables para producción.

  • Prefiere promesas para flujo claro y control de errores.
  • Nunca confíes en rutas construidas desde input externo.
  • Normaliza con `path.resolve`.
  • Restringe operaciones a un directorio permitido.
  • Rechaza rutas relativas sospechosas (`../`).

API moderna de archivos en Node

Prefiere promesas para flujo claro y control de errores.

Validar rutas antes de operar

Nunca confíes en rutas construidas desde input externo.

  • Normaliza con `path.resolve`.
  • Restringe operaciones a un directorio permitido.
  • Rechaza rutas relativas sospechosas (`../`).

Errores frecuentes con `fs`

Debes tratarlos como casos esperados, no excepcionales.

  • `ENOENT`: archivo no existe.
  • `EACCES`: permisos insuficientes.
  • `EISDIR`: intentaste leer directorio como archivo.

Aplicación real

Logs, cach? local y exportación de reportes usan este patr?n.

Si diseñas bien lectura/escritura, evitarás cuellos de botella en tareas programadas y scripts de mantenimiento.

JavaScript
54

Leer/escribir archivos de forma segura

Trabaja con archivos en Node sin bloquear el event loop, validando rutas y controlando errores de lectura y escritura.

Código del tema: fs/promises | readFile | writeFile

📘 Teoría

API moderna de archivos en Node

Prefiere promesas para flujo claro y control de errores.

Lectura segura
Revisar
import { readFile } from 'node:fs/promises';

try {
  const text = await readFile('./data/config.json', 'utf8');
  console.log(text);
} catch (err) {
  console.error('No se pudo leer el archivo', err.message);
}

Validar rutas antes de operar

Nunca confíes en rutas construidas desde input externo.

  • Normaliza con `path.resolve`.
  • Restringe operaciones a un directorio permitido.
  • Rechaza rutas relativas sospechosas (`../`).

Errores frecuentes con `fs`

Debes tratarlos como casos esperados, no excepcionales.

  • `ENOENT`: archivo no existe.
  • `EACCES`: permisos insuficientes.
  • `EISDIR`: intentaste leer directorio como archivo.

Aplicación real

Logs, cach? local y exportación de reportes usan este patr?n.

Si diseñas bien lectura/escritura, evitarás cuellos de botella en tareas programadas y scripts de mantenimiento.

🧪 Aprende probando

Ejemplo Ejemplo guiado: flujo mínimo funcional Construye una versión simple y verifica salidas en consola.
Ejemplo Ejemplo guiado: iterar y registrar estado Patrón útil para depuración incremental.
Ejemplo Demo interactiva: mini laboratorio Interactúa con la UI y observa cambios en preview y consola.

🏁 Retos

Reto Reto 1: transformación controlada Crea una variable `resultado` transformando un valor de entrada y muéstrala en consola.
Reto Reto 2: función reutilizable Encapsula la lógica en una función para reutilizarla.

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .