Hoy · Hoja de ruta
- 1. Aprende: Cómo se reparte una aplicación Express en ficheros y qué hace un router.
- 2. Haz: Reorganiza tu proyecto con la estructura de la unidad.
- 3. Comprueba: Cada fichero se explica en una frase y el arranque queda separado de la aplicación.
Antes de empezar · 5 minutos, sin apuntes
- ¿Cuántas líneas tiene hoy tu
servidor.js? - ¿Qué partes cambiarían si añadieras un segundo recurso?
- ¿Cómo probarías tu aplicación sin levantar un servidor?
Un router por recurso
// src/rutas/productos.js
import { Router } from "express";
const router = Router();
router.get("/", listarProductos);
router.get("/:id", obtenerProducto);
router.post("/", crearProducto);
router.put("/:id", reemplazarProducto);
router.delete("/:id", borrarProducto);
export default router;
// src/app.js
import express from "express";
import productos from "./rutas/productos.js";
export function crearApp() {
const app = express();
app.use(express.json({ limit: "100kb" }));
app.use(registro);
app.use(express.static("publico"));
app.use("/api/productos", productos);
app.use(noEncontrado);
app.use(manejadorDeErrores);
return app;
}
Las rutas del router son relativas al punto donde se monta, así que la ruta base aparece una sola vez. Cambiar /api/productos por /api/v1/productos es cambiar una línea.
Separar la aplicación del arranque
// src/servidor.js
import { crearApp } from "./app.js";
const PUERTO = Number(process.env.PUERTO ?? 3000);
crearApp().listen(PUERTO, () => console.log(`Escuchando en el puerto ${PUERTO}`));
Quien crea la aplicación no debe arrancarla
Si app.js llama a listen, importarlo desde una prueba levanta un servidor de verdad, ocupa un puerto y obliga a apagarlo después.
Con la aplicación por un lado y el arranque por otro, las pruebas de la sesión 15 importan la aplicación y le hacen peticiones sin abrir ningún puerto. Es una decisión de dos líneas que decide si tu proyecto se puede probar.
El orden, otra vez
- Analizador del cuerpo y registro
- Estáticos
- Routers de la API
- 404 para lo que no encajó
- Manejador de errores, siempre el último
Tarea 3 · Reorganizar
- Crea
src/app.jsconcrearApp()y dejaservidor.jssolo con el arranque. - Mueve las rutas de productos a su router.
- Mueve el registro y los errores a
src/middleware/. - Comprueba que todo sigue funcionando con tu fichero de peticiones.
- Añade un segundo router vacío para un recurso nuevo y monta su ruta base.
- Escribe en cada fichero la frase que lo describe.
/api/v1 cambiando una sola línea.Cierre de la semana 1
- Tu API está diseñada por recursos y escrita como contrato.
- Todos los errores comparten forma.
- Cada recurso tiene su router.
- La aplicación se puede crear sin arrancarla.
Ver respuestas
1 · Para poder importarla en las pruebas sin ocupar un puerto.
2 · Relativas al punto donde se monta el router.
3 · El manejador de errores, después incluso del 404.
Microprueba semanal 1 · 5–10 minutos
Individual, sin IA y sin apuntes.
- Reescribe orientadas a recursos:
/obtenerProductosy/borrarProducto?id=7. - Di qué código de estado devuelve cada operación del CRUD cuando va bien.
- ¿Por qué la aplicación se crea en un fichero y se arranca en otro?