← Node.js: JavaScript fuera del navegador

Sesión 3 · Semana 1

Módulos y estructura del proyecto

Hoy · Hoja de ruta

  1. 1. Aprende: Cómo se organizan los módulos en Node y qué diferencia hay con los dos sistemas que verás.
  2. 2. Haz: Estructura tu proyecto en carpetas con una responsabilidad cada una.
  3. 3. Comprueba: Cada fichero se puede explicar en una frase.

Antes de empezar · 5 minutos, sin apuntes

  1. En la UD3 separaste datos, lógica y uso. ¿Sigue valiendo aquí?
  2. ¿Qué parte de un servidor cambiaría si mañana los datos vinieran de una base de datos?
  3. ¿Has visto require en algún tutorial? ¿Qué crees que es?

Dos sistemas de módulos

Sistema Cómo se escribe Cuándo aparece
ESM import / export El nuestro, y el estándar del lenguaje
CommonJS require / module.exports Node antiguo y mucha documentación

Para usar ESM basta una línea en package.json:

{ "type": "module" }

Verás muchísimo require por ahí. Funciona, pero es el sistema heredado: si una respuesta de IA o un tutorial te lo dan, tradúcelo en lugar de mezclar los dos.

Una diferencia práctica: en ESM no existen __dirname ni __filename. Su equivalente:

import { dirname } from "node:path";
import { fileURLToPath } from "node:url";

const aqui = dirname(fileURLToPath(import.meta.url));

Otra: en Node la extensión es obligatoria en las rutas relativas, igual que en el navegador.

Estructura por responsabilidad

Qué pregunta responde cada capa
  1. almacen.js · dónde están los datos
  2. catalogo.js · qué reglas tienen
  3. servidor.js · cómo se piden desde fuera
  4. cli.js · cómo se piden desde la terminal

La lógica no sabe de dónde vienen los datos

Tus funciones de catálogo reciben un array y devuelven otro. No leen ficheros, no conocen HTTP y no imprimen nada. Por eso las puedes usar hoy desde la terminal y mañana desde el servidor sin tocarlas.

Esa separación es la que hace que el cambio de la UD6 —pasar del fichero a otra forma de guardar— afecte a un solo módulo. Es también, exactamente, la arquitectura por capas del módulo de servidor.

Tarea 3 · Estructurar el proyecto

  1. Crea la carpeta mi-api/ con package.json y "type": "module".
  2. Crea src/ con almacen.js, catalogo.js y cli.js.
  3. Mueve ahí tus funciones de la UD3 sin modificarlas.
  4. Escribe en un comentario, en cada fichero, la frase que lo describe.
  5. Calcula la ruta de datos/productos.json a partir de la posición del fichero.
  6. Comprueba que cli.js funciona desde cualquier carpeta.
Objetivo mínimoProyecto estructurado, con ESM y rutas que no dependen de dónde se ejecute.
Si lo tienesTraduce a ESM un fragmento escrito con require.
RetoDibuja el grafo de dependencias y comprueba que la lógica no depende de nada de infraestructura.

Cierre de la semana 1

  • Ejecutas programas de Node y les pasas datos.
  • La configuración está fuera del código.
  • Tu proyecto tiene una estructura con responsabilidades claras.
  • Usas ESM y sabes reconocer CommonJS.
Ver respuestas

1 · Añadiendo "type": "module" al package.json.

2 · Con import.meta.url, convertido a ruta con las utilidades de node:url y node:path.

3 · Para que la misma lógica sirva desde la terminal, desde el servidor y desde las pruebas.

Microprueba semanal 1 · 5–10 minutos

Individual, sin IA y sin apuntes.

  1. Nombra dos cosas que existen en el navegador y no en Node, y dos que existen en Node y no en el navegador.
  2. ¿Qué significa que un programa termine con código de salida 1?
  3. ¿Dónde vive el puerto de tu servidor, y por qué no está escrito en el código?
---