Ejercicio: Servidor HTTP con Express
Objetivo
Construir en tu computadora un servidor Express con rutas, parámetros, un POST con JSON, un middleware y un 404, y reproducir con JavaScript puro el mecanismo de rutas y de middleware.
Cómo se trabaja
La parte A es práctica real en tu terminal: es el corazón del ejercicio. La parte B son tres funciones de JavaScript puro que imitan cómo Express empareja rutas, encadena middlewares y nombra estados; las pruebas en el editor y las compruebas abajo. Pega solo el JavaScript, sin <script>.
Pasos
Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.
💡 Pista 1: ¿qué falla si la petición se queda colgada?
Casi siempre es un middleware que no llama a next() y tampoco responde.
💡 Pista 2: coincide
Divide el patrón y la ruta con split("/"). Si tienen distinta longitud, no coinciden. Si una parte del patrón empieza por :, es un parámetro; si no, debe ser igual.
💡 Pista 3: ejecutar
Guarda un índice i. next toma middlewares[i++] y lo llama con (req, res, next). Crea res con un send que guarde el texto en una variable.
🔎 Comprueba tu trabajo
Pega tu código y pulsa Comprobar. La revisión ocurre en tu navegador; nada se envía a ningún sitio. Cada punto en rojo incluye una pista. Pega solo el JavaScript, sin las etiquetas <script>.
✅ Ver una solución posible
Intenta resolverlo antes de mirar. Tu versión puede ser distinta y también correcta.
function coincide(patron, ruta) {
const p = patron.split("/");
const r = ruta.split("/");
if (p.length !== r.length) return null;
const params = {};
for (let i = 0; i < p.length; i++) {
if (p[i].startsWith(":")) {
params[p[i].slice(1)] = r[i];
} else if (p[i] !== r[i]) {
return null;
}
}
return params;
}
function ejecutar(middlewares, req) {
let enviado = null;
const res = { send(texto) { enviado = texto; } };
let i = 0;
const next = () => {
const mw = middlewares[i++];
if (mw) mw(req, res, next);
};
next();
return enviado;
}
function describirEstado(codigo) {
const estados = {
200: "OK",
201: "Creado",
400: "Petición incorrecta",
404: "No encontrado",
500: "Error del servidor"
};
return estados[codigo] ?? "Desconocido";
}
💡 🏁 Reto extra (opcional)
Añade a tu servidor una ruta GET /producto/:id que devuelva uno de tres productos de un array y responda 404 si el id no existe. Después mejora coincide para que ignore una barra final (/usuarios/5/).