‫Instrutor: Outro pequeno recurso
‫bom que podemos adicionar a uma
‫API é fornecer uma rota de alias para uma solicitação que
‫pode ser muito popular, de
‫modo que pode ser solicitada o tempo todo.
‫E, por exemplo,
‫podemos fornecer uma rota especificamente para
‫os cinco melhores passeios baratos.
‫Portanto, se usarmos nossa rota normal
‫aqui com os filtros e todos
‫os recursos
‫que já temos, a solicitação seria um pouco assim.
‫Então, vamos nos livrar de tudo isso.
‫Então, os cinco melhores e mais baratos tours.
‫Então, isso significa que temos um limite de
‫cinco e, em seguida, vamos classificar por classificações e por preço.
‫Então, classifique e, em seguida, a
‫classificação média e, em ordem decrescente, menos a média das classificações.
‫E, caso tenham a mesma média, então
‫queremos o preço mais barato possível.
‫E então, vamos classificar também por preço.
‫Vamos rapidamente dar uma olhada nos resultados.
‫E, de fato, temos cinco tours aqui.
‫E Postman faz essa rolagem novamente.
‫Portanto, temos tours com 4. 9, 4.
‫9, 4.
‫9 novamente, 4. 8 e 4. 7
‫E então, esses são, na verdade, nossos cinco melhores e mais baratos tours.
‫Se dissermos mais barato e
‫melhor, bem, talvez tenhamos que classificar por preço primeiro,
‫porque alguns deles não são realmente baratos.
‫Por exemplo, este aqui.
‫Mas, selecionamos, primeiro, a média.
‫E assim, classificamos primeiro pela maior média e,
‫só depois em caso de empate, basicamente, só então,
‫pelo preço.
‫Agora, digamos que se trata de uma solicitação
‫que se faz o tempo todo
‫e que queremos oferecer um
‫roteiro simples e fácil de memorizar para o usuário.
‫Então, vamos para nosso aplicativo e tentar implementar isso.
‫E, vamos começar com suas rotas, então faça um tour roteador.
‫E, então, precisamos criar uma nova rota.
‫E, vamos fazer isso aqui, bem no topo.
‫Então, roteador. rota.
‫E então, como vamos chamar essa rota?
‫Bem, digamos que os 5 mais baratos.
‫Então, um nome bem simples, mas vai funcionar.
‫E então, na verdade,
‫queremos apenas receber solicitações para esta rota.
‫E então, agora é hora de pensar.
‫Como vamos implementar essa funcionalidade?
‫Bem, em essência, o que
‫queremos é ainda ter todos os passeios como aqui.
‫E então, deixe-me ir em frente e começar
‫copiando e colando isso aqui.
‫Portanto, ainda queremos usar essa função aqui porque realmente
‫não faz sentido
‫reescrever toda a lógica que está lá.
‫Mas, antes de podermos chamar esse ender de rota,
‫basicamente queremos preencher alguns dos campos na string
‫de consulta.
‫Portanto, já sabemos
‫que nossa string de consulta deve ser semelhante a esta.
‫E, na verdade, podemos adicionar mais algumas coisas aqui.
‫Mas, em essência, nossa string
‫de consulta deve ser parecida com isso.
‫E então, a solução será executar um middleware
‫antes de realmente executar este manipulador getAllTours.
‫E então, essa função de
‫middleware irá manipular o objeto de consulta que está chegando.
‫E então, este é outro
‫exemplo muito bom de uso de middleware
‫porque você realmente precisa se familiarizar e se
‫acostumar com esse conceito de usar middleware estrategicamente
‫para alterar o objeto de solicitação conforme necessário.
‫Então, vamos adicioná-lo aqui.
‫Então, tourController.
‫E então, a
‫função de middleware que criaremos em um
‫segundo, que será chamada de aliasTopTours.
‫Então, vamos copiar esse nome, mover para o tourController
‫e vou colocá-lo aqui no topo.
‫Então, exportações. em seguida, solicitação,
‫resposta e qual é o terceiro argumento
‫de que
‫precisamos no middleware, lembra?
‫E, eu sei que a seção Express já está
‫meio longe neste ponto, mas espero que você lembre que o
‫terceiro argumento aqui precisa ser o próximo.
‫Portanto, para chamar o próximo middleware que
‫está na pilha de middleware.
‫Dê uma chance.
‫E então, esse erro deve desaparecer.
‫E então, vamos fazer o que dissemos que faríamos.
‫Então, basicamente para manipular o
‫objeto de consulta de forma que quando ele
‫atingir o manipulador getAllTours, ele já esteja diferente.
‫Então, vamos primeiro fazer
‫isso e depois realmente dar uma olhada no que acontece.
‫Portanto, lembre-se, o limite será definido em cinco.
‫E, lembre-se de que tudo são cordas aqui e então estou
‫definindo isso também para uma corda.
‫Agora, o que mais nós tínhamos?
‫Então, nós temos
‫esse tipo, então vamos apenas copiar aqui e dizer req. inquerir. organizar.
‫Deve ser isso.
‫E então, também podemos especificar
‫alguns campos para que o usuário não obtenha
‫todos os campos que temos neles.
‫Então, digamos
‫que queremos apenas o nome, o preço, a
‫média das avaliações, o resumo e a dificuldade.
‫Salve e agora
‫tudo o que precisamos é o próximo, caso contrário, este middleware ficará preso
‫aqui para sempre e não poderá seguir em frente.
‫Então, vamos descobrir um
‫pouco melhor o que realmente vai acontecer aqui.
‫Portanto, assim que
‫alguém atingir a rota mais barata, começaremos.
‫O primeiro middleware que será executado é aliasTopTours.
‫Então, a função que acabamos de criar.
‫Então, o que isso fará é
‫definir essas propriedades do
‫objeto de consulta para esses valores que especificamos aqui.
‫Basicamente, preenchemos previamente partes do
‫objeto de consulta antes de chegarmos ao manipulador getAllTours.
‫E assim, assim que chegarmos a essa função, o objeto
‫de consulta já estará pré-preenchido, mesmo que o
‫usuário não tenha colocado nenhum desses parâmetros
‫na string de consulta.
‫E então, em essência, o que estamos
‫fazendo aqui
‫é pré-preencher a string de consulta para o usuário, de forma
‫que o usuário não tenha que fazer isso sozinho.
‫E então, vamos realmente prosseguir e tentar isso.
‫Então, estou copiando isso.
‫E aqui não são passeios.
‫É um dos 5 melhores passeios.
‫Uau, o que está acontecendo aqui?
‫Por algum motivo, ele
‫não encontra essa rota, então vamos voltar.
‫Então, 5 principais tours.
‫E então, aqui na rota, ah, tudo bem.
‫É chamado de top 5 barato,
‫então meu erro aqui.
‫Então, barato, envie
‫agora, e ainda não está correto.
‫Ah sim.
‫Claro, ainda tenho que colocar os tours aqui, claro.
‫Então, estamos no recurso de tours e todo o roteador
‫está montado nessa rota de
‫tours, lembre-se disso.
‫E então, é nesses passeios, naquele tipo de
‫mini-aplicativo, lembre-se disso,
‫onde criei essa rota top 5-barata.
‫Então, vamos esperar que funcione agora.
‫E, de fato, é verdade.
‫Então, funcionou, é fantástico.
‫Agora, é claro, poderíamos fazer muito mais
‫rotas alternativas aqui, mas isso não é realmente necessário.
‫Eu realmente queria apenas
‫mostrar a vocês o conceito, mostrar que pode ser
‫um bom recurso para adicionar a qualquer
‫API e também queria, novamente, mostrar a vocês o poder dos middlewares.
‫Então, estamos falando sobre Mongoose aqui, mas ainda
‫assim, é muito importante continuar
‫se familiarizando com os conceitos do Express de que falamos antes.
‫De qualquer forma, agora terminamos com nossos recursos de API.
‫No próximo vídeo, vamos apenas refatorar tudo
‫isso rapidamente para tornar o
‫código inteiro um pouco mais modular e, claro, melhor.