‫Instructor: Muy bien, en
‫esta conferencia, vamos a hablar
‫sobre algo llamado rutas anidadas, qué
‫son, por qué las
‫necesitamos y cómo podemos implementarlas en Express.
‫Pensemos por un segundo cómo, en
‫la práctica, realmente queremos crear una nueva revisión.
‫Hasta este punto, al crear nuevas reseñas, siempre pasábamos
‫manualmente el ID del tour y el
‫ID de usuario al cuerpo de la solicitud, y
‫luego creábamos la reseña a partir de ahí, a la derecha.
‫Eso está bien durante el desarrollo, pero, por supuesto, no
‫es así como se creará una revisión
‫en el mundo real.
‫Por lo tanto, en el mundo real, la
‫identificación de usuario debería provenir idealmente del usuario que ha iniciado
‫sesión actualmente y una identificación del recorrido debe provenir del recorrido actual.
‫Idealmente, eso debería estar codificado justo
‫en la ruta, es decir, en la URL.
‫Al enviar una solicitud de publicación para
‫una nueva revisión, queremos enviarla a una URL como esta.
‫Escribamos eso aquí solo como un comentario.
‫Idealmente, querremos hacer una solicitud
‫de publicación, recorrido y la identificación del recorrido, realmente
‫no importa aquí, y luego las revisiones.
‫Bien, así que ahora, así, tenemos el
‫ID del tour directamente en la URL
‫y el ID de usuario también vendrá
‫del usuario actualmente conectado.
‫Lo que vemos aquí ahora es una ruta denominada anidada.
‫Tienen mucho sentido cuando existe
‫una relación clara entre padres e hijos entre los recursos.
‫Ese es claramente el caso aquí, ¿verdad?
‫Reseñas es claramente un hijo de la gira.
‫Esta ruta anidada
‫básicamente significa acceder al recurso de
‫reseñas en el recurso del recorrido, de acuerdo.
‫De la misma manera, también querremos acceder
‫a las reseñas de un recorrido determinado de la misma manera.
‫Digamos luego una solicitud de obtención, y nuevamente
‫para el tour slash ID de tour y reseñas de slash.
‫Idealmente, esto nos proporcionaría
‫todas las reseñas de esta gira.
‫Podríamos ir aún más lejos
‫y también especificar el ID de la revisión.
‫Así que de nuevo, solo una cadena aleatoria aquí,
‫pero entiendes el punto.
‫En este caso, obtendríamos una revisión
‫con la ID de esto
‫aquí en el recorrido con esta ID.
‫De esto se tratan las rutas anidadas.
‫Esta es una forma mucho más fácil de
‫leer y comprender cómo funciona la API para nuestros usuarios de API.
‫Es mucho más fácil que
‫jugar con cadenas de consulta y todo eso.
‫Además, realmente muestra cómo
‫existe esta relación clara entre estos
‫recursos, nuevamente, reseñas y recorridos.
‫Está bien, pero basta de hablar.
‫Ahora implementemos esto comenzando con
‫la ruta de publicación.
‫Ahora, dado que la ruta en realidad comienza con recorridos, por
‫supuesto se redirigirá a nuestro enrutador de recorridos.
‫Tendremos que implementar esta funcionalidad al menos por ahora, en
‫el enrutador de recorrido, aunque eso
‫parece un poco contraintuitivo ya que, de
‫hecho, estamos lidiando con revisiones.
‫Pero nuevamente, por ahora, implementémoslo así.
‫Llegamos a nuestro enrutador de usuario y primero, dado
‫que en realidad vamos
‫a usar revisiones
‫aquí, necesitamos importar el controlador de revisión.
‫Requiere controlador.
‫Quizás debería haber copiado la línea de antes.
‫Controladores y controlador de revisión.
‫Muy bien, ahora aquí en la parte inferior, y
‫obtengamos nuestro código para
‫este ejemplo desde aquí solo
‫como referencia.
‫De modo que ahora podamos implementarlo.
‫La ruta que vamos a implementar
‫aquí es ID de barra y luego revisiones.
‫Esta parte del recorrido aquí, como ya saben,
‫es donde montamos este enrutador
‫y, por lo tanto, no tenemos que repetirlo aquí.
‫Pero luego, tenemos el ID de la gira y luego las reseñas de barras.
‫Para dejar esto realmente claro,
‫llamémoslo ID de viaje, ya que
‫ahora estamos tratando
‫con diferentes recursos aquí.
‫Así que es un poco más claro llamarlo realmente como es.
‫Ahora queremos implementar la revisión de creación.
‫Authcontroller dot protect.
‫También queremos restringir el acceso solo a los
‫usuarios, y luego, por supuesto, nuestro controlador de revisión dot
‫create review, de acuerdo.
‫Nuevamente, es un poco extraño y contrario a la
‫intuición llamar al controlador de revisión aquí en
‫la ruta del usuario.
‫Bueno, en realidad, no debería estar en la ruta del usuario.
‫Por alguna razón, abrí las
‫rutas del usuario y no las rutas del tour, lo siento mucho.
‫Cortémoslo desde aquí, venimos a nuestras rutas turísticas y, de hecho,
‫hagámoslo aquí en la parte inferior.
‫Por supuesto, también necesitamos obtener el controlador de revisión.
‫Así que ahora deberíamos estar listos para irnos.
‫Eso fue un error estúpido.
‫Pero de todos modos, lo que
‫estaba diciendo es que no tiene mucho sentido
‫llamar al controlador de revisión en la ruta del
‫recorrido, pero nuevamente, por ahora, debemos hacerlo
‫así porque la ruta comienza con el recorrido.
‫Es este enrutador el que se activará.
‫En el siguiente video, vamos
‫a arreglar eso, pero por ahora,
‫solo queremos que funcione
‫y familiarizarnos con todo este concepto de rutas anidadas.
‫De todos modos, ahora obtuvimos nuestro ID de recorrido justo en la ruta,
‫pero, por supuesto, debemos
‫informarle al controlador que ahora debe usar este ID de recorrido y
‫también el ID del usuario que ha iniciado sesión actualmente.
‫Ahora debemos continuar
‫y actualizar nuestro controlador de revisión
‫aquí mismo, en crear revisión.
‫Lo que vamos a hacer es esto.
‫Diremos, si no hay una solicitud de tour de punto de cuerpo de
‫punto, entonces básicamente si no especificamos el ID
‫del tour y el cuerpo,
‫entonces queremos definirlo como el que viene
‫de la URL.
‫Req dot body dot tour es igual a request,
‫y ahora recuerde cómo ese parámetro de
‫URL está en request dot params y luego, por supuesto, el nombre
‫del parámetro en sí, por lo que el ID de tour.
‫Esta es la primera parte y
‫la segunda, también debemos hacer lo mismo con el usuario.
‫Si no hay una solicitud de usuario de
‫punto, o en realidad, una solicitud de usuario de punto de cuerpo de
‫punto, entonces la solicitud de usuario de punto de
‫cuerpo de punto debe solicitar la ID de punto de usuario de punto.
‫Y nuevamente, obtenemos un usuario punto
‫de solicitud del middleware de protección, y eso es todo.
‫Pongamos un comentario aquí, rutas anidadas.
‫Con esto, lo hacemos para
‫que el usuario aún pueda especificar manualmente el
‫recorrido y la ID de usuario.
‫Lo que estamos
‫haciendo aquí es simplemente definirlos cuando no están allí
‫o cuando no están especificados en el cuerpo de la solicitud.
‫Esto debería ser suficiente para que podamos probarlo ahora.
‫Muy bien, echemos un vistazo
‫a los usuarios que obtuvimos en este momento.
‫Tenemos estos dos usuarios
‫habituales, tenemos el usuario de prueba y tenemos
‫a Jonas aquí, pero olvidamos su contraseña.
‫Sigamos adelante, eliminemos este
‫usuario y creemos uno nuevo.
‫Muy bien, en Compass, los usuarios, y es
‫este.
‫Vamos a recrear este usuario básicamente.
‫Todo lo que realmente necesitamos son estos dos datos.
‫En realidad eso es registrarse.
‫El mismo nombre, el
‫mismo correo electrónico y la misma contraseña también.
‫En este punto, ya hemos iniciado sesión
‫como este usuario, el llamado Jonas, tengamos eso en cuenta.
‫A continuación, debemos elegir en qué
‫recorrido queremos crear la revisión.
‫Hagámoslo nuevamente aquí en The Forest Hiker
‫para que luego obtengamos múltiples reseñas en el mismo recorrido.
‫Lo que vamos
‫a hacer ahora es básicamente acceder a esa ruta anidada
‫que acabamos de crear.
‫Tenemos los tours.
‫Ahora necesitamos obtener la identificación del
‫recorrido y, nuevamente, usaremos
‫este para
‫The Forest Hiker, y luego recortaremos las reseñas y
‫luego recordaremos una publicación.
‫Luego, también necesitamos especificar la autorización, por lo que
‫el token de portador, y luego ahora en el cuerpo, todo lo
‫que realmente necesitamos es
‫especificar la calificación y la revisión.
‫La calificación es
‫cinco y luego algo de texto aquí.
‫Así que esto ya debería ser suficiente para probarlo.
‫Vamos a enviarlo.
‫Ahora no tenemos permiso para realizar
‫esta acción, por alguna razón, eso es extraño.
‫Nos registramos como este Jonas, y en realidad es
‫solo un usuario normal como se
‫supone que es.
‫Echemos un vistazo a nuestro enrutador.
‫Aquí, está bien, es el usuario, no los usuarios.
‫Un pequeño error como ese puede, como puede
‫ver, bloquear toda esta ruta, así que intentémoslo de nuevo ahora.
‫Y ahora obtenemos la revisión final
‫con el recorrido y el usuario correctamente definidos.
‫Por lo menos eso espero.
‫Verá, el ID del recorrido termina aquí en 951, por lo
‫que es exactamente el mismo aquí.
‫El usuario es este 1f3, y de hecho, es
‫exactamente el mismo.
‫Muy bien, y ahora deberíamos poder confirmar
‫eso, y este tour de obtención aquí
‫ya es en realidad en el que estábamos
‫creando la nueva revisión.
‫Echemos un vistazo y, de hecho,
‫ahora tenemos dos reseñas.
‫Este es el que acabamos de crear.
‫Está en el recorrido correcto y, por
‫supuesto, también el usuario correcto con el nombre de Jonas.
‫Impresionante, eso es realmente genial.
‫Sigamos adelante y salvemos esto.
‫Voy a crear una nueva carpeta aquí nuevamente.
‫Voy a llamarlo reseñas de barras inclinadas.
‫Ahora aquí, creemos,
‫creemos una nueva reseña en el recorrido.
‫Eso debería estar afuera y así.
‫De hecho, pongamos eso aquí.
‫Realmente no funciona como debería por alguna razón.
‫Y aquí vamos.
‫Muy bien, eso funcionó bien,
‫pero como mencioné antes, la implementación es
‫un poco confusa en este punto.
‫Y nuevamente, eso se debe a que técnicamente definimos una ruta
‫de revisión en el enrutador de recorrido.
‫Eso es un poco confuso, por lo que en
‫el siguiente video lo arreglaremos.