‫Narrador: Agora vamos melhorar
‫a implementação da rota aninhada que codificamos na última aula.
‫E
‫para isso, vamos usar um recurso expresso avançado especial.
‫Então, como você deve
‫se lembrar, no último vídeo implementamos uma rota de
‫postagem aninhada simples, apenas esta aqui.
‫Direito. E isso significa que a
‫rota de revisão está dentro da rota do tour.
‫E de novo, porque as resenhas pertencem a passeios em certo sentido.
‫Direito?
‫E isso é uma coisa muito comum de se fazer no design da API.
‫Agora, o problema com esta implementação é que ela
‫é, obviamente, um pouco confusa.
‫E isso porque colocamos uma rota para a criação de uma
‫revisão no roteador de tour.
‫Simplesmente porque uma rota começa com um tour de barra.
‫Isso é um pouco
‫confuso, e o que também
‫é confuso é que temos algo muito semelhante a
‫isso aqui, também em nossa rota de revisão.
‫Então, basicamente isso aqui.
‫Portanto, quando criamos uma nova revisão sem a rota
‫aninhada, esta parte do código aqui é exatamente igual
‫a esta. Direito?
‫E assim, além de ser um
‫pouco confuso, também temos código duplicado que teríamos
‫que manter em dois lugares separados caso quiséssemos mudar alguma coisa.
‫E então, novamente, essa é uma prática muito ruim.
‫E agora vamos corrigir isso usando um recurso
‫expresso avançado chamado mergeParams.
‫Portanto, primeiro vamos remover este código
‫que não pertence realmente ao roteador de tour.
‫Em seguida, importaremos o roteador de revisão para
‫este roteador de tour.
‫OK?
‫Portanto, agora estamos importando o controlador de
‫teste, mas na verdade queremos o roteador de teste.
‫Então, vamos nos livrar
‫deste e, na verdade, vou excluí-lo por completo.
‫E
‫agora, o roteador
‫de revisão.
‫E tudo bem.
‫Então, vamos realmente pegar esse código e colocá-lo aqui no topo,
‫apenas para
‫ver o que estamos fazendo, porque
‫na verdade iremos criar um novo
‫código bem aqui no topo.
‫E então o que vamos
‫fazer
‫aqui é roteador. usar.
‫E então, basicamente, diremos que este roteador
‫de tour deve usar
‫o roteador de revisão caso encontre uma rota como esta.
‫E
‫reveja as rotas.
‫Eu chamei de rotas ou roteador?
‫Deve ser chamado de roteador.
‫OK?
‫Portanto, lembre-se de que o próprio roteador é,
‫na verdade, apenas um middleware.
‫E então podemos usar o método use nele,
‫e então dizer que para esta
‫rota específica aqui, queremos usar o roteador de revisão.
‫OK?
‫E isso é, na verdade, novamente a montagem de um roteador.
‫Então, se você der uma olhada nisso, aqui
‫no app. js,
‫isso é exatamente o que fizemos.
‫Então nós fizemos. use,
‫o URL e
‫o roteador.
‫E aqui, o que
‫estamos fazendo é exatamente a mesma coisa.
‫Portanto, este é o roteador de tour e dizemos
‫bem, sempre que você encontrar um URL como este,
‫bem, basta usar o roteador de revisão.
‫E então, agora, quando temos um URL como este, ele
‫vai começar entrando no roteador de tour aqui, ok, porque, novamente, começa
‫com slash tours, ok, então basicamente é redirecionado
‫para
‫o roteador de tour, então quando chega ao
‫roteador de tour, então ele vai
‫corresponder a este URL aqui
‫e, em seguida, será redirecionado novamente para o roteador de revisão.
‫E assim, temos o roteador
‫de tour e o roteador de teste
‫bem separados e desacoplados um do outro.
‫Mas agora, na verdade, ainda há uma peça faltando
‫porque neste momento este roteador de avaliação
‫aqui não tem acesso a este parâmetro de id de passeio, ok.
‫E agora precisamos habilitar o roteador
‫de revisão para realmente obter acesso a este parâmetro aqui também.
‫Então, vamos agora passar para o roteador de revisão, ok.
‫E então é aqui que os mesgeParams
‫médicos que mencionei no início
‫entram em ação.
‫Então aqui, no expresso. função de roteador,
‫podemos especificar algumas opções, e aqui
‫tudo o que precisamos fazer é definir mergeParams
‫como true.
‫E é isso.
‫Mas por que realmente precisamos disso aqui?
‫Bem, é porque,
‫por padrão, cada roteador só
‫tem acesso aos parâmetros de suas rotas específicas, certo.
‫Mas aqui, nesta rota, neste URL para esta postagem, é claro
‫que não há nenhum ID de tour.
‫Mas, ainda queremos ter acesso ao
‫id do tour que estava neste outro roteador, certo.
‫Então, isso aqui.
‫E assim, para obter acesso a esse
‫parâmetro neste
‫outro roteador, precisamos mesclar fisicamente os parâmetros, ok.
‫E é isso que mergeParams, definido como true, faz.
‫E agora, não importa se obtivermos uma rota como
‫esta, vamos apenas copiá-la aqui.
‫Novamente, é mais fácil visualizá-la com um exemplo.
‫E então, novamente, não importa se obtivermos uma
‫rota como esta,
‫ou uma rota como esta, agora tudo terminará neste manipulador aqui, ok.
‫Então, no final, basicamente, para essa função de manipulador.
‫E mais uma vez isso funciona porque
‫todas as rotas que começam com
‫este tipo de padrão aqui serão redirecionadas para
‫este roteador exatamente nesta linha de código aqui, ok.
‫Então, redirecionamos para o roteador de revisão
‫aqui e ali ele corresponderá a esta rota exata,
‫certo.
‫E graças aos parâmetros
‫de mesclagem, obtemos acesso a essa
‫id que, na verdade, vem do outro roteador anterior.
‫Excelente.
‫Então, vamos fazer uma limpeza
‫aqui, realmente nos
‫livrar disso,
‫disso
‫aqui, e vamos experimentar rapidamente agora.
‫Vou criar um novo comentário aqui e
‫vamos tentar outra ferramenta desta vez.
‫Portanto, o andarilho da cidade.
‫E tudo o que
‫precisamos fazer é alterar essa id aqui na URL, certo.
‫Então, a avaliação vai
‫ser
‫três, e então estava tudo bem.
‫Tudo bem, então essa revisão ainda será feita com
‫o Jonas, então a partir dessa conta,
‫tudo bem,
‫porque ainda é aquela que está logada no momento, tudo bem.
‫Então, vamos enviar
‫isso, e de fato aqui temos o tour que acabamos de especificar,
‫e ainda o mesmo usuário.
‫Então, isso é mais uma vez, só para ter certeza de verificar o
‫tour para ver se agora ele recebe
‫essa revisão e sim, foi.
‫E então aquele truque do parâmetro de mesclagem, que acabamos
‫de implementar, realmente funciona muito bem
‫e conforme o pretendido.
‫Agora, para ver isso em ação, melhor ainda,
‫vamos adaptar a função de henry
‫para obter todas as avaliações de um passeio específico logo
‫no próximo vídeo.