‫Instructor: Otra característica pequeña
‫y agradable que podemos agregar a una
‫API es proporcionar una ruta de alias a una solicitud que
‫puede ser muy popular, por lo
‫que es posible que se solicite todo el tiempo.
‫Y, por ejemplo, es
‫posible que deseemos proporcionar una ruta específicamente
‫para los cinco mejores tours económicos.
‫Entonces, si usáramos nuestra ruta regular aquí
‫con los filtros y con todas
‫las características
‫que ya tenemos, la solicitud se vería un poco así.
‫Así que, superemos todo esto.
‫Entonces, los cinco mejores y más baratos tours.
‫Entonces, eso significa que tenemos un límite de
‫cinco y luego ordenaremos por calificaciones y por precio.
‫Entonces, ordena y luego la
‫calificación promedio, y descendiendo, menos las calificaciones promedio.
‫Y, en caso de que tengan el mismo promedio,
‫entonces queremos el precio más barato posible.
‫Entonces, clasificaremos también por precio.
‫Echemos un vistazo rápido a los resultados.
‫Y, de hecho, tenemos cinco recorridos aquí.
‫Y Postman vuelve a hacer este desplazamiento.
‫Entonces, tenemos tours con 4. 9, 4.
‫9, 4.
‫9 de nuevo, 4. 8 y 4. 7.
‫Entonces, estos son en realidad nuestros cinco mejores y más baratos tours.
‫Si dijéramos más barato y mejor,
‫bueno, entonces quizás tendríamos que ordenar primero por precio porque
‫algunos de ellos no son realmente baratos.
‫Por ejemplo, este.
‫Pero, seleccionamos, primero, el promedio.
‫Entonces, ordenamos primero por el promedio más alto
‫y, solo luego, en caso de empate, básicamente, solo entonces,
‫por el precio.
‫Ahora, digamos que esta es una solicitud que
‫se hace todo el tiempo y
‫queremos brindar una ruta que
‫sea simple y fácil de memorizar para el usuario.
‫Entonces, vayamos a nuestra aplicación e intentemos implementar eso.
‫Y vamos a empezar en sus rutas, así que recorra el router.
‫Y luego necesitamos crear una nueva ruta.
‫Y hagámoslo aquí, en la parte superior.
‫Entonces, enrutador. ruta.
‫Y entonces, ¿cómo vamos a llamar a esta ruta?
‫Bueno, digamos top-5-barato.
‫Entonces, un nombre bastante simple, pero funcionará.
‫Y luego, en realidad
‫solo queremos obtener solicitudes para esta ruta.
‫Entonces, ahora es el momento de pensar.
‫¿Cómo implementaremos esta funcionalidad?
‫Bueno, en esencia, lo
‫que queremos es tener todos los recorridos como aquí.
‫Entonces, déjeme seguir adelante y comenzar a copiar
‫y pegar eso aquí.
‫Entonces, realmente todavía queremos usar esta función aquí porque
‫realmente no tiene
‫sentido reescribir toda la lógica que está allí.
‫Pero, antes de que podamos llamar a esta ruta ender, básicamente
‫queremos rellenar previamente algunos de los campos en la
‫cadena de consulta.
‫Entonces, ya sabemos
‫que nuestra cadena de consulta debería verse así.
‫Y, de hecho, podemos agregar algunas cosas más aquí.
‫Pero, en esencia, nuestra cadena
‫de consulta tiene que tener este aspecto.
‫Entonces, la solución será ejecutar un middleware
‫antes de ejecutar este controlador getAllTours.
‫Y entonces, esa función
‫de middleware manipulará el objeto de consulta que está entrando.
‫Y entonces, este es
‫otro ejemplo realmente bueno de usar middleware
‫porque realmente necesita familiarizarse y acostumbrarse a
‫este concepto de usar middleware estratégicamente para cambiar
‫el objeto de solicitud cuando lo necesitemos.
‫Entonces, agreguemos aquí.
‫Entonces, tourController.
‫Y luego,
‫la función de middleware que crearemos en
‫un segundo, que se llamará aliasTopTours.
‫Entonces, copiemos ese nombre, pasemos al tourController y lo
‫pondré aquí en la parte superior.
‫Entonces, exportaciones. luego solicitud, respuesta
‫y cuál es el tercer argumento que
‫necesitamos
‫en el middleware, ¿recuerdas?
‫Y sé que la sección Express ya está un
‫poco lejos en este punto, pero espero que recuerden que el
‫tercer argumento aquí debe ser el siguiente.
‫Entonces, para llamar al siguiente middleware que
‫está en la pila de middleware.
‫Dale una oportunidad.
‫Y entonces, este error debería desaparecer.
‫Entonces, hagamos lo que dijimos que haríamos.
‫Entonces, básicamente para manipular
‫el objeto de consulta para que cuando
‫llegue al controlador getAllTours, ya sea diferente.
‫Entonces, primero hagamos eso
‫y luego echemos un vistazo a lo que sucede.
‫Entonces, recuerde, el límite se establecerá en cinco.
‫Y recuerde que todo son cadenas aquí, así que estoy
‫configurando esto también como una cadena.
‫Ahora, ¿qué más teníamos?
‫Entonces, tenemos este
‫tipo, así que copiemos esto aquí y digamos req. consulta. clasificar.
‫Debería ser esto.
‫Y luego, también podemos especificar
‫algunos campos para que el usuario no obtenga
‫todos los campos que tenemos allí.
‫Entonces, digamos
‫que solo queremos el nombre, el precio, el
‫promedio de calificaciones, el resumen y la dificultad.
‫Guárdelo y ahora
‫todo lo que necesitamos es lo siguiente; de lo contrario, este middleware se
‫quedará atascado aquí para siempre y no podrá seguir adelante.
‫Entonces, ahora averigüemos un poco
‫mejor qué es lo que realmente va a pasar aquí.
‫Entonces, tan pronto como alguien
‫llegue a la ruta de los 5 mejores baratos, comenzaremos.
‫El primer middleware que se ejecutará es aliasTopTours.
‫Entonces, la función que acabamos de crear.
‫Entonces, lo que esto va a
‫hacer es establecer estas propiedades
‫del objeto de consulta en estos valores que especificamos aquí.
‫Básicamente, rellenar previamente partes del
‫objeto de consulta antes de llegar al controlador getAllTours.
‫Y así, tan pronto como llegamos a esta función, el objeto
‫de consulta ya está precargado, incluso si el usuario
‫no puso ninguno de estos parámetros en
‫la cadena de consulta.
‫Y entonces, en esencia, lo que estamos
‫haciendo aquí es
‫rellenar previamente la cadena de consulta para el usuario para que
‫el usuario no tenga que hacerlo por su cuenta.
‫Y entonces, sigamos adelante e intentemos esto.
‫Entonces, estoy copiando esto.
‫Y aquí no se trata de giras.
‫Son los 5 mejores tours.
‫Whoa, ¿qué está pasando aquí?
‫Por alguna razón,
‫no encuentra esta ruta, así que retrocedamos.
‫Entonces, top-5-tours.
‫Y entonces, aquí en la ruta, ah, está bien.
‫Se llama top-5-cheap, así que
‫mi error aquí.
‫Entonces, barato, envíalo
‫ahora, y aún no es correcto.
‫Ah sí.
‫Por supuesto, todavía tengo que poner los tours aquí, por supuesto.
‫Entonces, estamos en el recurso de recorridos y todo el enrutador
‫está montado en esta ruta
‫de recorridos, recuérdelo.
‫Y entonces, es en esos tours, ese tipo
‫de mini aplicación,
‫recuerda eso, donde creé esta ruta top-5-barata.
‫Entonces, esperemos que funcione ahora.
‫Y, de hecho, lo hace.
‫Así que funcionó, es fantástico.
‫Ahora, por supuesto, podríamos hacer muchas más rutas
‫de alias aquí, pero eso no es realmente necesario.
‫Realmente solo quería mostrarles
‫el concepto, mostrarles que puede ser una
‫buena característica para agregar a cualquier
‫API y también quería, nuevamente, mostrarles el poder de los middlewares.
‫Entonces, estamos hablando de Mongoose aquí, pero aún
‫así, es muy importante
‫seguir familiarizándose con los conceptos Express de los que hablamos antes.
‫De todos modos, ahora hemos terminado con nuestras funciones de API.
‫En el siguiente video, vamos a refactorizar rápidamente
‫todo esto para hacer que todo el
‫código sea un poco más modular y, por supuesto, mejor.