Hoy · Hoja de ruta
- 1. Aprende: Cómo se organizan los módulos en Node y qué diferencia hay con los dos sistemas que verás.
- 2. Haz: Estructura tu proyecto en carpetas con una responsabilidad cada una.
- 3. Comprueba: Cada fichero se puede explicar en una frase.
Antes de empezar · 5 minutos, sin apuntes
- En la UD3 separaste datos, lógica y uso. ¿Sigue valiendo aquí?
- ¿Qué parte de un servidor cambiaría si mañana los datos vinieran de una base de datos?
- ¿Has visto
requireen 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
- almacen.js · dónde están los datos
- catalogo.js · qué reglas tienen
- servidor.js · cómo se piden desde fuera
- 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
- Crea la carpeta
mi-api/conpackage.jsony"type": "module". - Crea
src/conalmacen.js,catalogo.jsycli.js. - Mueve ahí tus funciones de la UD3 sin modificarlas.
- Escribe en un comentario, en cada fichero, la frase que lo describe.
- Calcula la ruta de
datos/productos.jsona partir de la posición del fichero. - Comprueba que
cli.jsfunciona desde cualquier carpeta.
require.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.
- Nombra dos cosas que existen en el navegador y no en Node, y dos que existen en Node y no en el navegador.
- ¿Qué significa que un programa termine con código de salida 1?
- ¿Dónde vive el puerto de tu servidor, y por qué no está escrito en el código?