Ejercicio: Errores, validación y seguridad básica
Objetivo
Añadir validación, un manejador de errores y CORS a la API de tareas, y escribir en JavaScript puro las funciones que los sostienen.
Cómo se trabaja
La parte A es práctica real en tu terminal: parte de tu API de la lección 5 (o crea una nueva). La parte B son tres funciones de JavaScript puro que luego puedes usar tal cual en el servidor. Pega solo el JavaScript, sin <script>.
Pasos
Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.
💡 Pista 1: ¿el manejador no se ejecuta?
Debe registrarse después de todas las rutas y tener exactamente cuatro parámetros, aunque no uses next.
💡 Pista 2: validarTarea con null
Usa encadenamiento opcional: datos?.titulo. Así no falla si datos es null.
💡 Pista 3: formatearError
Calcula estado = err.status ?? 500. Solo se oculta el mensaje cuando esProduccion es verdadero y estado >= 500.
🔎 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 validarTarea(datos) {
const errores = [];
if (typeof datos?.titulo !== "string" || datos.titulo.trim() === "") {
errores.push("titulo obligatorio");
} else if (datos.titulo.length > 100) {
errores.push("titulo demasiado largo");
}
if (datos?.hecha !== undefined && typeof datos.hecha !== "boolean") {
errores.push("hecha debe ser booleano");
}
if (datos?.prioridad !== undefined && !["baja", "media", "alta"].includes(datos.prioridad)) {
errores.push("prioridad invalida");
}
return errores;
}
function crearErrorHttp(estado, mensaje) {
const error = new Error(mensaje);
error.status = estado;
return error;
}
function formatearError(err, esProduccion) {
const estado = err.status ?? 500;
const ocultar = esProduccion && estado >= 500;
return {
estado,
cuerpo: { error: ocultar ? "Error interno del servidor" : err.message },
};
}
💡 🏁 Reto extra (opcional)
Añade a validarTarea una regla de fecha límite opcional (limite) que debe ser un texto con formato AAAA-MM-DD y una fecha real. Pista: new Date(...) y Number.isNaN.