‫Instructor: A continuación, hablemos de validadores personalizados.
‫Entonces, a veces, los validadores incorporados simplemente no son suficientes.
‫Y en
‫ese caso, también podemos construir nuestros propios validadores personalizados.
‫Y un validador es en realidad una función simple
‫que debería devolver verdadero o falso.
‫Y si devuelve falso, significa que hay un error.
‫Y por otro lado cuando devolvemos
‫verdadero, entonces la validación es
‫correcta y la entrada puede ser aceptada.
‫Bien, ahora construyamos un validador personalizado simple aquí.
‫Y lo que quiero validar es si el descuento del precio es
‫realmente menor que el precio en sí.
‫Eso es algo que no
‫podemos hacer con los validadores integrados,
‫por lo que simplemente construiremos los nuestros.
‫Necesitamos ahora especificar aquí un objeto
‫para las opciones de SchemaType.
‫Bien.
‫Entonces, el tipo es número,
‫y luego para especificar nuestro validador
‫usamos la propiedad validate.
‫Validar, y luego, como dije, una función de
‫devolución de llamada simple.
‫Y nuevamente, no es una función de
‫flecha, sino una función
‫real, porque en
‫esta función vamos a tener acceso a la
‫variable this, que apuntará al documento actual.
‫Ahora bien, si no necesita la variable this, entonces,
‫por supuesto, podría usar una función de flecha.
‫Tenemos una función de devolución
‫de llamada, y esa función de devolución de llamada en
‫realidad tiene acceso al valor que se ingresó.
‫Entonces, en este caso, el precio de descuento que el usuario especificó.
‫Así que eso es lo que yo llamo valor, val para abreviar.
‫Recuerde que debemos devolver
‫verdadero o falso de este validador.
‫¿Cuándo queremos devolver
‫falso y cuándo queremos devolver verdadero?
‫Bueno, queremos un error cuando el precio de descuento
‫es mayor o igual que el precio.
‫Entonces, básicamente, lo que queremos devolver aquí
‫es la prueba de probar si el valor
‫es menor que esto. precio.
‫Muy bien, digamos que el precio de descuento es 100
‫y que el precio real es 200.
‫100 es menor que 200, cierto, por lo que no tenemos ningún error.
‫Y eso tiene sentido porque eso es exactamente lo que queremos.
‫El descuento de precio siempre debe ser menor.
‫Por otro lado, si el descuento es 250,
‫entonces resulta falso.
‫Y luego falso, recuerde, desencadenará un error de validación.
‫Probémoslo ahora en realidad.
‫Precio
‫(chasquido del teclado) y descuento
‫de precio.
‫Y usemos los valores que usamos
‫antes y también necesito cambiar el nombre aquí.
‫Bien, ahora nuestro descuento es mayor que el precio y
‫deberíamos obtener nuestro error.
‫Está bien y, de hecho, tenemos un error de validación.
‫Así que falló para el descuento del precio de la ruta.
‫Ahora, no tenemos ningún mensaje personalizado aquí, así
‫que arreglemos eso rápidamente.
‫Está bien, y la forma en que lo hacemos es muy similar
‫a como lo hicimos con la enumeración.
‫Así que necesitamos especificar otro objeto y luego
‫establecer la propiedad del mensaje.
‫Validar
‫debería ser un objeto
‫y luego tenemos nuestro mensaje allí
‫y esta función aquí vivirá
‫en una propiedad llamada validador.
‫Está bien y nuestro mensaje aquí
‫será (taconeo del teclado) El precio de descuento
‫debe estar
‫por
‫debajo del precio normal.
‫Aquí necesitamos una coma y ahora estamos bien.
‫Y de hecho, un truco muy bueno es que este mensaje
‫aquí también tiene acceso al valor.
‫Y esto funciona de una manera extraña y esto
‫realmente es interno de Mongoose, por lo que
‫esto no tiene nada que
‫ver con JavaScript, por lo que simplemente puedo usar las llaves aquí y luego valorar.
‫Entonces, esta pieza aquí tendrá acceso al
‫valor que se ingresó, por
‫lo que tiene exactamente el mismo valor que esta variable val.
‫Así que
‫probemos eso de nuevo y ahora
‫recibimos nuestro mensaje e incluso accedemos al precio de 250 que especificamos aquí.
‫Ahora cambiémoslo a 100 y ahora debería funcionar y
‫sí, lo hace.
‫Que bien.
‫Ahora hay una advertencia muy importante que
‫debemos notar aquí y es
‫que dentro de una función de validación,
‫esta palabra clave solo apuntará al
‫documento actual
‫cuando estemos creando un nuevo documento.
‫Entonces, esta función aquí no funcionará en la actualización.
‫Y eso es muy importante de tener en cuenta.
‫Verá, que en Mongoose, hay un par de advertencias
‫que realmente debe tener en
‫cuenta al trabajar con él.
‫Y aprendí todo esto por
‫experiencia y por eso ahora puedo contárselo.
‫Entonces me encontré con un error una vez con este
‫y, a partir de
‫ese momento, sé que solo puedo usar este tipo de
‫validador con una palabra clave this
‫allí cuando en realidad estoy creando nuevos documentos.
‫Así que déjame escribir eso aquí para ti.
‫(Tintineo del teclado) Muy bien, espero
‫que esté tomando nota de todas estas
‫pequeñas piezas de información muy importantes que son
‫muy importantes.
‫Lo mismo aquí abajo.
‫Recuerde que donde le
‫dije que este DOCUMENT MIDDLEWARE solo se ejecuta realmente para
‫guardar y crear, pero no para actualizar.
‫Y esa es una de estas otras
‫cosas que es realmente importante no olvidar nunca.
‫Ahora, en este caso
‫específico aquí, en realidad hay formas de solucionar este problema,
‫pero son muy complicadas y no vale la pena seguirlas.
‫Y, por supuesto, también podríamos escribir funciones de
‫validación que no dependan de esta variable.
‫Entonces, en este caso, solo lo necesitamos
‫porque estamos comparando un valor con el valor de otro campo.
‫Este es un validador personalizado que podemos usar en
‫Mongoose y que nosotros mismos escribimos.
‫Pero también, hay un par de bibliotecas en
‫npm para la validación de datos que simplemente podemos
‫conectar aquí como validadores personalizados que no tenemos que escribir nosotros mismos.
‫Y la biblioteca más popular se llama validador, así
‫que echemos un vistazo a esa.
‫Validator y luego estoy buscando GitHub
‫porque generalmente todas estas bibliotecas están siempre en GitHub.
‫Y la documentación también estará allí, así
‫que aquí puede ver
‫que el validador
‫es una biblioteca de validadores y desinfectantes de cadenas.
‫También ves que es bastante popular con 13,00 estrellas
‫y eso
‫es muy bueno.
‫También vemos que esta biblioteca valida
‫y desinfecta solo cadenas.
‫Aquí están todas las cosas sobre cómo lo
‫instalamos y cómo lo usamos, pero eso es algo simple.
‫Eso ya lo sabemos.
‫Pero lo que quiero mostrarles
‫es la lista de todos los validadores disponibles.
‫Por ejemplo, tenemos isAlpha, que
‫comprobará si la cadena contiene solo letras.
‫Tenemos alfanumérico, así que solo letras y números, y
‫realmente tenemos muchas cosas aquí.
‫Así que verifique si una cadena es
‫boolian, o verifique si la cadena es una tarjeta de crédito, por lo
‫que es un número de tarjeta de crédito válido.
‫O si es una
‫moneda o ves realmente todo tipo de pruebas diferentes.
‫Por ejemplo, un ISBN, es decir, para comprobar los números de los libros.
‫Para probar si es un número entero o si la cadena está en minúsculas.
‫Y como puede ver, siempre que necesite validación de datos,
‫puede tomar una de estas
‫bibliotecas y simplemente conectarlas a sus validadores de Mongoose.
‫Ahora, muchas de las
‫cosas que están aquí ya están
‫integradas en Mongoose, por lo que no las necesitamos
‫todas, está bien, pero hay una
‫muy específica, que quiero usar, que es isAlpha.
‫Así que quiero comprobar si el nombre del tour solo contiene letras.
‫Y para eso puedo usar esta función
‫de la biblioteca del validador.
‫Regresemos y comencemos instalando el
‫validador npm
‫i (teclado clacking).
‫Eso fue exitoso.
‫Entonces necesito
‫importarlo aquí y ahora estamos listos para usarlo aquí.
‫Lo usaré aquí
‫y otra vez, uso la propiedad de validación
‫y ahora todo lo que
‫necesito hacer es conectar realmente la función aquí.
‫Y en el validador, funciona así, donde
‫el validador es un
‫objeto y ahí tenemos todos estos métodos.
‫Validator es Alpha,
‫así que
‫ese
‫es el que elegimos
‫de la documentación.
‫Y eso es todo.
‫Entonces no lo llamamos aquí.
‫Básicamente, solo especificamos que
‫esta es una función que debe usarse.
‫Al igual que el nuestro, como nuestro propio validador, no
‫lo llamamos.
‫Simplemente colocamos aquí esta función de devolución de
‫llamada que se
‫llamará tan pronto como se validen los datos.
‫Y aquí es lo mismo.
‫Ahora, si queremos especificar un mensaje de
‫error, funciona igual que aquí.
‫Podemos especificar una matriz y luego el mensaje de error después de la
‫función de devolución de llamada.
‫Y podríamos haberlo hecho aquí abajo.
‫Entonces aquí lo hicimos de manera diferente.
‫Aquí, luego creamos este nuevo objeto con
‫el validador allí y el mensaje, pero también
‫podríamos haberlo hecho con una matriz,
‫pero eso habría parecido extraño.
‫Pero aquí arriba, dado que la función es tan
‫pequeña, entonces esto es tan pequeño, simplemente podemos ponerlo aquí
‫y luego, como segundo argumento en la matriz, agregar
‫el mensaje de error.
‫El nombre del tour
‫solo debe contener (sonido del teclado) caracteres.
‫Genial, mira eso.
‫De vuelta en Postman, eliminemos nuestro descuento en el precio.
‫Y agreguemos un número aquí.
‫Y entonces eso debería fallar en
‫la prueba y, de hecho, el nombre solo debe contener caracteres.
‫Deshagámonos de eso.
‫Tampoco podemos usar este nombre.
‫Ya lo usamos antes,
‫por lo que también se puede escribir aquí
‫con caracteres y todavía recibimos este error aquí.
‫Bueno, probablemente se deba a los espacios.
‫Así que vamos a deshacernos de los
‫espacios, lo que por supuesto no será realmente útil
‫y, de hecho, ahora funciona.
‫Entonces el problema eran los
‫espacios, pero obviamente queremos mantener los espacios aquí.
‫De hecho, este error de validación no es realmente útil, por lo
‫que me deshaceré de él.
‫Considere que esto aquí fue solo para demostrar que
‫podemos usar una biblioteca externa como esta
‫para realizar la validación.
‫Y, de hecho, seguiremos usando esta biblioteca un poco
‫más tarde cuando verifiquemos si el correo electrónico del usuario es realmente válido.
‫Esa es otra buena
‫función que se incluye en esta biblioteca.
‫De nuevo, así es como funciona.
‫No es realmente útil en
‫este caso, por lo que
‫si realmente quisiéramos probar si la cadena solo contiene letras y
‫espacios, probablemente sería
‫más simple usar una expresión regular para
‫probar ese tipo de patrón.
‫Pero no voy
‫a hacer eso aquí porque esta conferencia
‫fue más sobre estos validadores personalizados.
‫De todos modos, con esta conferencia, ahora estamos listos
‫con la introducción a Mongoose.
‫Ahora, como puede imaginar, todavía hay mucho
‫que aprender sobre Mongoose y, de hecho,
‫tenemos una sección avanzada de Mongoose un poco más adelante
‫en el curso
‫y, por supuesto, también en las
‫otras secciones, seguirá aprendiendo más
‫y más sobre cómo usar
‫Mongoose de una manera realmente profesional.
‫Ya has aprendido mucho hasta este
‫punto, así que enhorabuena por llegar tan lejos y
‫es genial ver que todavía estás conmigo aquí.
‫Muy buen trabajo y espero verte pronto.