‫Instructor masculino: Finalmente, ahora
‫manejemos los errores de validación de Mongoose.
‫Entonces, ¿recuerdas cómo intentamos actualizar un recorrido con algunos
‫datos no válidos aquí
‫y luego obtuvimos este tipo de error?
‫Bueno.
‫Y, de hecho, intentemos agregar otro.
‫Entonces, un nombre que es muy corto, ¿de acuerdo?
‫Y porque eso no está permitido, de nuevo.
‫Ah, y ahora ya no podemos ver nuestro error
‫porque ahora estamos en producción.
‫Y, por supuesto, este error en este
‫momento no se maneja correctamente.
‫No está marcado como operativo.
‫Y, por
‫lo tanto, recuerde que recibimos este tipo de mensaje de error genérico.
‫¿Okey?
‫Entonces, solo para ver el error que teníamos antes,
‫volvamos rápidamente al desarrollo.
‫Entonces npm start.
‫Y envíalo ahora
‫de nuevo.
‫Y ahora recuperamos nuestros errores de desarrollo, ¿de acuerdo?
‫Porque ahora quiero
‫mostrarles cómo podemos crear un mensaje de error significativo basado
‫en todo esto, lo que tenemos aquí.
‫Ahora a la derecha.
‫Entonces, dentro de
‫nuestro error, obtenemos propiedades de error.
‫Y esa propiedad en sí es un
‫objeto que tiene muchos objetos allí, y cada
‫uno de ellos es para uno de los campos que tiene un error.
‫¿Está bien?
‫Entonces, el primero aquí es para la duración del recorrido.
‫Entonces el segundo es por la dificultad,
‫que también está mal.
‫Y el tercero es para la calificación, ¿de acuerdo?
‫Entonces, cada uno de estos tiene un mensaje de error agradable, ¿de acuerdo?
‫Básicamente, el que definimos en nuestro esquema Mongoose.
‫Y ahora queremos extraer estos
‫tres mensajes de aquí
‫y ponerlos todos en una sola cadena, ¿de acuerdo?
‫Así que sigamos adelante y hagamos eso.
‫Bueno.
‫Y de
‫nuevo, empezaré creando el condicional aquí abajo.
‫Entonces, si
‫(error), echemos un vistazo.
‫Entonces aquí tenemos el error.
‫Tenemos los errores, todos.
‫Y necesito desplazarme aquí.
‫Y sí, aquí está el nombre.
‫Entonces error. el nombre es ValidationError, ¿de acuerdo?
‫Así que agarremos eso.
‫Bueno.
‫Y, de nuevo, esto es un error creado por Mongoose.
‫Así que al igual
‫que el primero, y se ven similares, está bien.
‫Ahora no quiero esto aquí.
‫Pero, en cambio,
‫quiero que el error sea igual a handleValidationErrorDB
‫y envíe el error, ¿de acuerdo?
‫Ahora copiemos esto de nuevo.
‫Está bien.
‫Y de nuevo, simplemente comencemos por crear nuestro mensaje.
‫Datos de entrada no válidos.
‫Y luego regresemos también el error.
‫Entonces nuevo AppError (mensaje, 400).
‫Entonces VS Code
‫ya reconoció que quería escribir eso, ¿de acuerdo?
‫Ahora, para crear una cadena
‫grande de todas las cadenas de todos los
‫errores, básicamente tenemos que recorrer todos estos
‫objetos y luego extraer todos los mensajes de error en una nueva matriz.
‫Así que, de nuevo, echemos un vistazo a eso.
‫Bueno.
‫Entonces, el objeto que tiene todos los
‫objetos allí tiene errores, ¿de acuerdo?
‫Así que tenemos un error para el nombre, uno
‫para la dificultad y otro para ratingsAverage.
‫Y así, básicamente, recorreremos este objeto de errores.
‫¿Okey?
‫Y en JavaScript, usamos Object. valores
‫para básicamente recorrer un objeto.
‫Entonces los elementos de un objeto.
‫¿Está bien?
‫Así que creemos una variable aquí llamada errores, que nuevamente
‫será una matriz de todos
‫los mensajes de error por ahora,
‫y ahora Object. valores.
‫Y entonces queremos los valores de err. errores, ¿de acuerdo?
‫Y ahora recorrelos usando un mapa.
‫Y luego, en
‫cada iteración, simplemente devolveremos el mensaje de error, ¿de acuerdo?
‫Entonces, solo para asegurarnos de que todos estamos en la
‫misma página aquí, el Objeto. los valores son estos objetos, ¿de acuerdo?
‫Entonces este objeto, y este objeto, y el siguiente, ¿de acuerdo?
‫Entonces estos son los valores.
‫Y ahora todo
‫lo que tenemos que hacer para extraer
‫el mensaje es decir valor. mensaje, ¿de acuerdo?
‫Tan . mensaje.
‫Básicamente, el valor actual, o digamos
‫el elemento actual,
‫me gusta usar el elemento para
‫eso, y queremos devolver el. mensaje.
‫Bueno.
‫Y ahora, por supuesto, esto no debería estar aquí.
‫Y probablemente ya lo habías notado.
‫Entonces, de hecho, aquí es donde queremos esto, ¿de acuerdo?
‫Y ahora todo lo
‫que tenemos que hacer es introducir esto en nuestra cadena de mensajes, ¿de acuerdo?
‫Entonces, errores, y ahora simplemente los unimos todos en
‫una cadena usando un punto y luego un espacio, ¿de acuerdo?
‫Y verá, en un segundo, por qué es así.
‫Está bien.
‫Así que volvamos a la producción aquí.
‫Así que ejecutamos nuestro script de inicio de producción.
‫Inténtelo de nuevo ahora y esperemos, ¡y
‫bam!
‫¡Aquí vamos!
‫Tan datos de entrada inválidos.
‫Luego, la primera cadena de error debe tener
‫más o igual de 10 caracteres.
‫Luego el
‫segundo y el tercero.
‫Perfecto.
‫Y por eso usé el punto y el espacio, ¿de acuerdo?
‫Entonces, básicamente, separar estas tres cadenas con un punto
‫y un espacio, ¿de acuerdo?
‫Y ahora esto parece un mensaje de
‫error muy bien formateado que todos pueden entender fácilmente.
‫¿Derecha?
‫Entonces, básicamente hemos terminado aquí.
‫Está bien.
‫Ahora podríamos haber cometido este error, manejo del
‫error, mucho más completo aún.
‫Por ejemplo, podríamos definir diferentes niveles de gravedad de error como decir,
‫este error no es tan importante, este
‫error es de importancia
‫media y este error es muy importante o incluso crítico.
‫Y también podríamos enviar un correo electrónico a algún
‫administrador sobre errores críticos.
‫Y realmente, hay muchas cosas que podríamos implementar.
‫Pero de nuevo, en una especie de aplicación pequeña como esta, lo
‫que tenemos aquí ya es realmente bueno, ¿de acuerdo?
‫Así que esta es una estrategia bastante
‫sólida que ya hemos
‫implementado aquí, y estoy muy contento con ella, ¿de acuerdo?
‫Así que toda esta lógica aquí con los errores
‫operativos que implementamos
‫aquí, eso ya es bastante sofisticado.
‫¿Okey?
‫Ahora bien, si alguna vez encontráramos otro error que
‫queramos marcar como operativo, entonces, por supuesto,
‫todo lo que tendríamos que
‫hacer es algo similar a lo que tenemos aquí, ¿de acuerdo?
‫Entonces, básicamente, implemente otra función para esa, y luego
‫devuelva nuestro propio error operativo para
‫que la producción de error
‫de envío pueda enviar ese error operativo
‫al cliente, ¿verdad?
‫De acuerdo, y dicho esto,
‫nuestro controlador de errores está realmente terminado.
‫Pero todavía hay algunos otros errores que debemos
‫manejar y que están completamente fuera de Mongo o incluso de Express.
‫Y así lo haremos en el resto de esta sección.