Saltar al contenido
Curso de Node.js y APIs
Todos los cursos

Ejercicio: Errores, validación y seguridad básica

  • ⏱ 60 minutos
  • 📶 Nivel: intermedio

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>.

▶ Prueba tu código aquí (opcional)
Consola

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.

    errores-y-validacion.js
    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.