‫Instructor: Entonces, Mongoose nos ofrece a
‫los desarrolladores formas muy poderosas de validar
‫los datos que ingresan a nuestro modelo.
‫Entonces, en este video, aprenderá
‫todo sobre la validación de datos con Mongoose.
‫Ahora bien, ¿qué significa exactamente la validación?
‫Bueno, la validación es básicamente verificar si los valores ingresados
‫están en el formato correcto para cada
‫campo en nuestro esquema de documento, y también si
‫los valores realmente se ingresaron para todos los campos requeridos.
‫Ahora, por otro lado, también tenemos la desinfección, que
‫consiste en garantizar que los datos ingresados estén básicamente limpios,
‫para que no se inyecte ningún código malicioso
‫en nuestra base de
‫datos o en la propia aplicación.
‫Entonces, en ese paso, eliminamos los caracteres no deseados,
‫o incluso el código, de los datos de entrada, ¿de acuerdo?
‫Y este es en realidad un paso crucial,
‫como un estándar de oro en el desarrollo de back-end.
‫Nunca, nunca aceptar datos de entrada provenientes de
‫un usuario tal como están.
‫Por lo tanto, siempre debemos desinfectar esos datos entrantes.
‫Pero, de todos modos, dejaré la desinfección de
‫datos para la sección de seguridad del
‫curso, para que en
‫esta conferencia podamos centrarnos por completo en la validación de datos.
‫Y estamos haciendo esta validación de datos
‫aquí mismo en el modelo.
‫Y eso, nuevamente, se debe al modelo gordo y
‫la filosofía del controlador delgado,
‫lo que hace que el modelo sea
‫el lugar perfecto para realizar la validación, ¿verdad?
‫Y, de hecho, Mongoose ya viene con un montón
‫de herramientas de validación listas para usar.
‫Entonces, hagamos ahora una validación de datos aquí.
‫Y de hecho, ya lo hicimos.
‫Entonces, cuando usamos este requisito aquí, en realidad ya es
‫un validador de datos integrado, ¿de acuerdo?
‫Entonces verá que usamos un validador como el requerido aquí
‫en las opciones de tipo de esquema.
‫Y required está disponible para todos los tipos de datos.
‫Entonces, no solo cuerdas, sino realmente todo.
‫Números, valores booleanos, fechas o, en realidad, el
‫tipo que estés usando.
‫Entonces también tenemos único aquí, pero tenga
‫en cuenta que en realidad, técnicamente, no es un validador.
‫Todavía producirá un error
‫cuando tengamos un nombre duplicado, pero
‫nuevamente, esto no es realmente un validador, ¿de acuerdo?
‫Pero, se requiere un validador, por lo
‫que ahora les mostraré otro que
‫es específicamente solo para cadenas,
‫que se llama longitud máxima y también longitud mínima.
‫Entonces, tenemos la longitud
‫máxima y, como dice el nombre, usamos esto
‫para especificar la longitud máxima que puede tener una cadena.
‫Y si es más largo que
‫eso, entonces va a producir un error, ¿de acuerdo?
‫Entonces, hagámoslo como lo hicimos antes con
‫required, donde especificamos una matriz y luego establecemos el valor.
‫Entonces, digamos que queremos 40 como la longitud máxima de la cadena,
‫y luego agregamos el error después de eso.
‫Entonces, básicamente, el mensaje de error que recibimos.
‫Por lo tanto, el nombre de un recorrido debe tener
‫menos de 40 caracteres o menos.
‫Bien, esa es la longitud máxima, y
‫luego también tenemos la longitud mínima.
‫Muy bien, establezcamos uno en 10, por lo que
‫el nombre de un recorrido debe tener más o menos 10 caracteres.
‫De acuerdo, y así, así, tenemos estos dos validadores que en
‫realidad solo están disponibles en cadenas, ¿de acuerdo?
‫Y, entonces, sigamos adelante e intentemos eso.
‫Entonces, voy a crear una nueva gira aquí.
‫Y este no es un tour
‫secreto, pero aquí el resto no importa.
‫Llamaré a esto un Tour de prueba, y
‫veamos cuántos personajes tenemos, así que
‫cuatro más uno, más cuatro, por lo
‫que solo tenemos nueve personajes.
‫Por lo tanto, ahora deberíamos esperar obtener un error.
‫Entonces, probemos eso.
‫Y, de hecho, el nombre de
‫un tour debe tener más o menos 10 caracteres.
‫Genial, pero ahora, ¿qué hay de actualizar los tours?
‫Entonces, consigamos uno de estos aquí.
‫Entonces, tenemos este recorrido de prueba dos aquí, así
‫que intentemos actualizar este.
‫Entonces, vamos a nuestra ruta de actualización.
‫Y ahora, cambiemos el nombre a Prueba, enviemos la
‫solicitud y obtenemos el mismo error.
‫Ahora, esto solo funciona debido a
‫una configuración que establecimos
‫hace mucho tiempo, cuando implementamos este controlador de actualización.
‫Entonces, déjame mostrarte eso rápidamente en el controlador de viaje.
‫Eliminar y actualizar, por lo que es debido
‫a esta opción aquí runValidators, establecida
‫en true, que los validadores se ejecutan nuevamente.
‫Si lo configuro
‫ahora como falso, Mongoose debería aceptar felizmente este nombre.
‫Y de hecho, lo hace, está bien.
‫Entonces, volvamos a establecerlo en algo
‫más largo,
‫no importa, está bien, y si lo vuelvo a
‫establecer en verdadero, entonces no
‫debería aceptarlo, y de hecho, recuperamos nuestro error, ¿de acuerdo?
‫Entonces, solo quería
‫mostrarle rápidamente el hecho de esa configuración.
‫Está bien, y sí, ahora están funcionando.
‫Probemos con un par de validadores más aquí.
‫Por ejemplo, ahora en números.
‫Entonces, vayamos aquí al promedio de calificaciones.
‫Y sabemos que la calificación
‫siempre debe estar entre uno y cero, y sabemos que una
‫calificación siempre debe estar entre uno y cinco, ¿de acuerdo?
‫Y así, muy similar a la longitud mínima y máxima,
‫en los números simplemente tenemos mínimo y máximo.
‫Entonces, el mínimo que queremos es uno, y luego
‫nuevamente nuestro mensaje de error.
‫Por lo tanto, la calificación debe estar por encima de 1. 0, digamos.
‫Y luego el máximo es cinco.
‫Debe estar por debajo de 5. 0, está bien, y probemos
‫rápidamente este también.
‫Entonces, al crear un nuevo recorrido, llamémoslo Test Tour
‫Amazing porque tiene una calificación promedio de seis.
‫Bien, veamos qué sucede entonces y, de
‫hecho, la calificación debe estar por debajo de cinco.
‫De acuerdo, eso de nuevo no va
‫a funcionar y, por supuesto, tampoco puede ser cero.
‫Entonces, debe estar por encima de uno y, por
‫supuesto, con cuatro, va a funcionar, y de hecho, aquí está nuestro recorrido.
‫A continuación, quiero restringir este valor de dificultad aquí
‫a solo tres dificultades.
‫Entonces, fácil, medio y difícil.
‫Y si el usuario pone algo
‫más, no funcionará.
‫Entonces, probemos eso.
‫Entonces, el validador que usamos para eso se llama enum, está
‫bien, y aquí podemos pasar una
‫matriz de los valores, básicamente, que están permitidos.
‫Entonces, tenemos fácil, tenemos medio y tenemos dificultades.
‫Muy bien, ahora también queremos especificar nuestro mensaje de error aquí,
‫pero ahora mismo eso no es realmente posible, ¿verdad?
‫Quiero decir, si agregamos otro argumento aquí, entonces
‫eso no sería para
‫el mensaje de error, por supuesto sería para otro valor posible, ¿de acuerdo?
‫Entonces, la solución que tenemos que
‫hacer aquí es crear otro objeto aquí,
‫y luego, realmente especificar que estos son los valores.
‫Y luego, nuestro mensaje, ¿de acuerdo?
‫Y así es como funciona realmente.
‫Esta notación aquí es en realidad
‫solo una abreviatura de este objeto completo aquí, ¿de acuerdo?
‫Entonces, la dificultad es: fácil, media o difícil.
‫De acuerdo, ese es un validador muy bueno y muy útil que está disponible
‫automáticamente en todas las cadenas, de acuerdo, así que no
‫intente usar este aquí en números, por ejemplo.
‫Esto es solo para cadenas.
‫Y, por cierto, este mínimo y máximo
‫aquí no es solo para
‫números, sino que también funcionará con fechas, ¿de acuerdo?
‫De todos modos, ahora finalmente probemos esto también.
‫Entonces, necesitamos cambiar el nombre, y
‫aquí pongamos algo más,
‫está bien, y de hecho, obtenemos nuestro error.
‫Si ahora lo ponemos fácil, entonces funciona.
‫De acuerdo, y eso es todo lo que
‫quería mostrarles aquí en
‫esta conferencia, pero en realidad hay un montón de validadores más.
‫Por ejemplo, en las cadenas tiene un validador de
‫coincidencias para verificar si la
‫entrada coincide con una expresión regular determinada.
‫Pero, creo que estos que les acabo de mostrar
‫aquí son los validadores integrados más importantes.
‫Y, para obtener una lista completa
‫de todos ellos, por supuesto, siempre puede consultar la documentación.
‫Ahora también podemos especificar nuestros propios validadores, y eso
‫es exactamente lo que haremos en
‫el siguiente video.