‫-: (Hombre) Entonces, en esta conferencia, aprenderá
‫cómo encadenar múltiples funciones de middleware para la misma ruta.
‫Así que hasta este punto, siempre que
‫queríamos definir un middleware, solo pasábamos una función de middleware.
‫Entonces, por ejemplo, aquí, para manejar esta solicitud de
‫publicación, solo pasamos esta función de middleware que
‫es nuestro controlador createTour.
‫¿Okey? Y esa es la
‫única función que se llamará cada vez que recibamos una solicitud de publicación.
‫¿Derecha? Pero digamos ahora que
‫queremos ejecutar múltiples funciones de middleware.
‫Ahora podría preguntar "¿Por qué querríamos hacer eso? ".
‫Bueno, podríamos, por ejemplo, ejecutar un middleware antes de
‫createTour aquí para verificar realmente los datos que
‫ingresan al cuerpo.
‫¿Derecha? Un poco similar a lo que teníamos antes.
‫Así que hicimos este middleware de verificación de ID
‫antes para verificar si la ID es realmente válida y hacerlo
‫fuera de los controladores de ruta
‫reales para que solo se preocupen por obtener, actualizar o eliminar
‫un recorrido.
‫¿Derecha? Y aquí, en este ejemplo específico
‫con publicación, podríamos querer hacer lo mismo.
‫Entonces, como dije, es posible que deseemos verificar si se solicita. buddy en realidad contiene
‫los datos que queremos para el recorrido.
‫¿Okey? Y entonces hagamos eso.
‫Y de hecho, quiero que primero lo hagas por tu cuenta.
‫Así que este es un desafío que quiero que completes para
‫poder usar los conceptos de los que hemos
‫hablado tantas veces en este punto y crear tu propia
‫función de middleware.
‫Así que déjame escribirlo aquí como comentario.
‫Así que
‫quiero que cree una función de middleware checkBody y
‫allí quiero que compruebe
‫si el cuerpo contiene la propiedad de nombre para el nombre del recorrido
‫y la propiedad de precio.
‫¿Está bien? Y si no, quiero que me envíe
‫un código de estado de cuatrocientos.
‫Si no es así, devuelva cuatrocientos, lo que significa
‫una mala solicitud.
‫Básicamente, una solicitud no válida del cliente, que en este
‫caso es intentar crear un nuevo recorrido sin un nombre y
‫sin una propiedad de precio.
‫¡Okey! Y eso es todo.
‫Y (risas) en realidad no.
‫Así que también quiero que lo agregue a la pila del controlador de publicaciones.
‫Básicamente. ¿Okey?
‫Así que quiero que lo agregue aquí.
‫Y de hecho les diré cómo
‫hacerlo porque no lo hicimos en este momento.
‫Entonces es muy fácil. Digamos que nuestra función se llama middleware y,
‫por lo tanto, lo que debe hacer es simplemente
‫agregar esa función aquí antes del controlador createTour que finalmente
‫creará el recorrido. ¿Okey?
‫De esta manera, cuando tengamos una solicitud de publicación para
‫esta ruta, primero ejecutará este middleware y solo
‫luego el createTour.
‫¿Okey? Así es como encadenamos dos middlewares diferentes.
‫Pero ahora quiero que continúes y crees este
‫middleware llamado checkBody.
‫Así que pausa el video ahora e intenta hacerlo por tu cuenta.
‫¡Okey! Así que espero que haya tenido éxito
‫al hacerlo y luego lo haya probado y que todo funcione.
‫Así que ahora déjame implementarlo a mi manera.
‫Entonces tenemos este error aquí, pero no se preocupe.
‫Es debido a este middleware que no está definido.
‫Y déjeme hacerlo aquí justo después del middleware checkID.
‫Entonces exporta. checkBody.
‫Tenemos que solicitar respuesta y siguiente.
‫Y entonces, en realidad, es bastante simple.
‫Entonces, si no hay ninguna solicitud. cuerpo. nombre, y creo
‫que ese es el nombre,
‫pero vayamos rápidamente a comprobarlo.
‫Así que aquí es un recorrido simple.
‫Sí, y de hecho se llama "nombre"
‫y el otro es "precio".
‫Entonces, si no hay un nombre de cuerpo de solicitud
‫o ningún cuerpo de solicitud. precio bueno, en
‫este caso, como antes, regresaremos de esta
‫función y enviaremos una respuesta.
‫Entonces, el estado aquí es recordar: cuatrocientos agreguen y luego
‫algún 'json' donde el estado es error.
‫Entonces es siempre cuando tenemos un código cuatrocientos.
‫Agregue luego el
‫mensaje
‫"Falta nombre o precio".
‫¿Okey? Por lo tanto, el precio y el nombre deben estar allí al mismo tiempo.
‫Entonces, si el precio no está allí o el nombre no está,
‫entonces ya enviamos este mensaje de error.
‫¿Okey? Pero si todo está correcto, entonces
‫queremos pasar al siguiente middleware.
‫Y eso es lo que decimos aquí.
‫Y luego, por supuesto, el próximo middleware será createTour.
‫Entonces este.
‫Entonces, sigamos adelante y luego agréguelo aquí.
‫Entonces tourController. checkBody.
‫Muy bien, ahora el error desapareció y deberíamos
‫poder probarlo ahora. Así que cerremos los
‫que no nos interesan y creemos un nuevo recorrido.
‫Así que ahora mismo tenemos nuestro cuerpo con el nombre, la
‫duración y la dificultad, pero no hay precio.
‫Entonces ahora deberíamos obtener nuestro error. ¿Derecha?
‫Así que probemos eso. Enviar. Y, de hecho,
‫tenemos 'Falta nombre o precio' con nuestra solicitud incorrecta de cuatrocientos.
‫¿Okey? Entonces analicemos lo que sucedió aquí nuevamente.
‫Entonces, nuestra solicitud llegó a esta ruta aquí y
‫fue una solicitud posterior. Entonces, ejecuta esta función
‫de middleware y desde esta función, enviamos esta respuesta
‫diciendo que, bueno, falta el nombre o el precio.
‫¿Okey? Pero si ahora suma el precio ... así que realmente
‫no importa el precio, envíalo, bueno,
‫entonces todo funciona bien y obtenemos un 201 creado.
‫Entonces, ¿qué pasó esta vez? Bueno, verificó el cuerpo y esta condición
‫no era verdadera, por lo
‫que llamó al siguiente middleware de la pila, que es createTour.
‫Entonces creó un recorrido y envió el resultado y
‫así, terminó el ciclo de solicitud-respuesta.
‫¿Derecha? Así que espero que haya sido un pequeño
‫desafío agradable y usaremos este tipo
‫de lógica aquí todo el tiempo, donde encadenamos varios
‫tipos de controladores aquí para la misma ruta. Entonces, por ejemplo, aquí podríamos verificar si un determinado usuario está
‫conectado o si tiene los
‫privilegios, por lo que los derechos de acceso, incluso para escribir un nuevo recorrido.
‫O realmente todo tipo de cosas que queremos que sucedan
‫antes de que se cree la gira.
‫¿Okey? Y una vez más lo hacemos porque queremos tomar toda
‫la lógica que realmente no
‫está relacionada con la creación del nuevo recurso fuera de ese controlador. De modo que ese manejador solo se preocupa realmente
‫por el trabajo que
‫se supone que debe hacer.