‫Instrutor:
‫Então, nesta aula,
‫você aprenderá uma maneira fácil de definir parâmetros
‫direto na URL, como ler
‫esses parâmetros e também como respondê-los.
‫Agora, o que queremos realmente implementar nesta palestra é
‫uma forma de obter apenas um tour.
‫Então, agora, temos esse ponto de
‫extremidade aqui, que nos
‫dá todos os passeios, e queremos algo assim.
‫Então, vamos copiá-lo em uma nova solicitação agora e, em
‫seguida, queremos a barra e, em seguida, o ID do passeio.
‫Então, por exemplo, digamos cinco, certo?
‫Então, é exatamente como falamos
‫na palestra da API REST, onde
‫eu disse que se atingirmos esse endpoint sem qualquer ID, então, assim
‫como está aqui, bem,
‫então obteríamos todos os tours.
‫Mas se especificarmos um ID depois disso, então, assim,
‫e é claro
‫que não precisa ser um
‫ID, pode ser qualquer identificador único, mas,
‫neste caso, a maneira mais fácil de
‫implementá-lo é apenas use IDs, ok?
‫Então, isso aqui é obviamente uma variável, porque
‫pode ser cinco, mas também pode ser qualquer outra coisa.
‫E então esse pedaço da URL
‫aqui, então esse aqui, isso é uma variável, ok?
‫E então o
‫que precisamos fazer é definir uma rota que pode aceitar uma variável.
‫Tudo bem, então vamos fazer isso aqui e,
‫na verdade, logo após este.
‫E vou copiá-lo, porque
‫você já sabe como escrever.
‫E então, sim.
‫Portanto, aqui temos a
‫rota e, agora, tudo o que precisamos fazer é adicionar essa variável.
‫E isso é muito fácil.
‫Então nós temos nossa barra novamente, e
‫então a variável, nós a definimos usando dois pontos, assim.
‫E assim, criamos uma variável chamada ID.
‫Claro que poderia ser qualquer
‫outra coisa, como var ou X.
‫Realmente não importa.
‫Mas esse aqui se chama ID, certo?
‫Agora, não queremos enviar de volta nada parecido
‫com isso, então vamos apenas comentar.
‫E o que eu quero que
‫você dê uma olhada
‫é no console ponto log, req ponto params.
‫Ok, então request dot params é onde todos os parâmetros de
‫todas as variáveis que definimos aqui são armazenados, ok?
‫Portanto, essas variáveis aqui na URL são chamadas de parâmetros
‫e, novamente, estão em req dot
‫params, disponíveis para usarmos agora.
‫Então, vamos dar uma olhada agora
‫e realmente fazer essa solicitação.
‫E por enquanto, não vai fazer
‫nada, então não vai nos dar o tour
‫número cinco automaticamente, é claro.
‫Mas o que eu quero
‫fazer agora é apenas dar uma olhada nos req dot params.
‫E, de fato, aqui temos, ID é cinco.
‫Portanto, request dot params é um objeto
‫muito bom que atribui automaticamente
‫o valor à nossa variável, portanto, nosso parâmetro que definimos.
‫E poderíamos realmente definir múltiplos.
‫Portanto, poderíamos dizer ID
‫e, em seguida, poderíamos dizer X e poderíamos dizer
‫Y, e então, é claro, teríamos que definir todos eles.
‫Então, 23
‫e 45, digamos.
‫Envie esse cara.
‫E então, de fato,
‫temos um objeto com todas essas três variáveis neles.
‫Ok, agora se os definirmos assim na
‫URL, temos que especificar.
‫Então, se não tivéssemos o
‫parâmetro Y, teríamos um
‫erro, porque agora não estamos atingindo essa rota exata, certo?
‫Então nossa rota agora não é mais exatamente essa,
‫mas é só isso.
‫E então, tem um erro, ok?
‫Faz sentido?
‫Agora, na verdade, há uma coisa
‫que podemos fazer: parâmetros opcionais.
‫Então se você quiser tornar este parâmetro opcional, nós
‫apenas adicionamos um ponto de interrogação
‫a ele, e agora, é opcional, então não precisamos mais especificá-lo.
‫Então, assim.
‫E agora temos apenas cinco, 23 e então Y
‫ainda está aqui, mas é indefinido, porque
‫agora é opcional.
‫Tudo bem.
‫Mas vamos nos livrar de
‫tudo isso, porque só precisamos realmente da identidade, ok?
‫E agora tudo
‫o que precisamos fazer é realmente obter o passeio
‫com esse ID de nossos dados. json, do nosso arquivo JSON, certo?
‫Então, basicamente, da variedade de passeios.
‫E isso não deve ser tão difícil.
‫Digamos que
‫const tour é igual
‫a tours ponto
‫find.
‫E não tenho certeza se você está familiarizado
‫com esse método de localização aqui.
‫Então, mais uma vez, isso não tem nada a ver com
‫Node ou Express, é apenas uma função JavaScript regular
‫que você pode usar em matrizes.
‫E a maneira como funciona é esta.
‫Então, aqui, passamos uma função de retorno de
‫chamada e, na verdade, deixe-me começar escrevendo-a.
‫Portanto, o ID do
‫elemento é igual aos parâmetros
‫dos pontos req, certo?
‫Então, basicamente, ele fará um loop pelo
‫array e, em
‫cada uma das iterações, teremos acesso ao
‫elemento atual e retornaremos verdadeiro ou
‫falso em cada uma das iterações, certo?
‫Agora, o que o método find fará
‫é basicamente criar um array
‫que contém apenas
‫o elemento em que essa comparação aqui acaba sendo verdadeira, certo?
‫E nesta situação, queremos encontrar o elemento
‫onde o ID é igual ao
‫que obtemos dos parâmetros.
‫E assim, especificando esta função de retorno de
‫chamada aqui com esta comparação, iremos
‫garantir que apenas o elemento onde o ID
‫é realmente igual ao ID especificado
‫nos parâmetros será retornado do
‫método find e armazenado no tour, certo?
‫Agora, na verdade, isso não vai funcionar assim, porque como você
‫pode ver aqui, esses
‫valores aqui, eles são na verdade strings, ok?
‫Portanto, precisamos convertê-lo em um número, mas
‫é muito fácil.
‫Tudo o que temos
‫a fazer é dizer que o ID é igual a
‫req ponto params ponto ID vezes um.
‫Portanto, este é um bom
‫truque em que o JavaScript, quando multiplicamos uma string que se
‫parece com um número, quando multiplicamos por
‫outro número, ele converte automaticamente essa string em um número.
‫Esse é um truque muito pequeno e agradável que podemos usar aqui.
‫E assim, agora, já temos nosso tour pronto para enviar.
‫E então os dados que
‫queremos enviar são passeios
‫iguais aos passeios.
‫Ou, na verdade, é
‫apenas uma turnê, então turnê deve ser igual a turnê, certo?
‫Faz sentido?
‫Então, talvez a parte mais complicada aqui seja
‫apenas essa, mas, sim, é novamente apenas um JavaScript normal.
‫E então eu acredito, ou pelo menos espero,
‫que você já esteja familiarizado
‫com o uso desse tipo de método de array, certo?
‫Então, queremos apenas a turnê número cinco.
‫E então vamos dar uma olhada se realmente funciona.
‫E bem, não funcionou, então vamos dar uma olhada nisso.
‫Sim, claro, aqui precisamos usar o ID, é claro.
‫Portanto, não req. params.
‫IDENTIFICAÇÃO.
‫Ok, então, tente novamente.
‫E agora, de fato, temos a turnê com ID de cinco, ok,
‫e apenas aquela turnê única.
‫Vamos tentar o número dois, por
‫exemplo, e de fato, o ID dois.
‫Mas agora, vamos tentar outra situação.
‫Vamos fazer, ID 23, e agora, não
‫recebemos nada de volta, certo?
‫E isso porque não há um tour com o ID 23, mas
‫ainda retornamos o código de status 200 OK,
‫e isso não faz muito sentido, ok?
‫E então vamos mudar isso.
‫E o que devemos fazer aqui?
‫Bem, como uma solução muito simplista, o
‫que podemos fazer é verificar se o ID
‫é maior do que o comprimento da matriz de passeios
‫e se for mais
‫longo, bem, podemos enviar de volta um erro
‫404 dizendo que não conseguimos encontrar qualquer tour para o ID fornecido.
‫Então, vamos fazer essa solução muito simples, porque, bem, esta não
‫é a API real que estamos construindo neste
‫ponto e, neste
‫caso, não é um problema
‫usar uma solução excessivamente simplista como essa, porque esta não
‫é a coisa real que estamos construindo aqui.
‫Na verdade, estamos apenas tentando
‫nos familiarizar com o funcionamento do Express.
‫E a mesma coisa pode realmente ser dita aqui,
‫por exemplo, quando nós ...
‫Então aqui embaixo, onde postamos um novo tour, no
‫mundo real, teríamos sempre, sempre que verificar se a entrada do
‫usuário é válida, se ela
‫não contém nenhum código malicioso, ou realmente, qualquer
‫coisa que não tenhamos não quero em nosso envoltório.
‫E de novo, faremos isso, é claro, mais
‫tarde, mas neste pequeno
‫exemplo aqui, eu realmente quero me concentrar nos fundamentos, ok?
‫Então, vamos implementar rapidamente o que acabamos
‫de dizer, que se o ID for maior do que o comprimento do ponto dos
‫passeios, por exemplo, digamos que temos 12 passeios em nossa matriz, bem,
‫se o ID for 13, ou 15, ou seja o que
‫for, bem, nesse caso, o ID não é válido.
‫Então, dizemos return, e isso é porque queremos
‫sair da função neste ponto, ok?
‫E é por isso que dizemos voltar.
‫Em seguida, enviamos um status 404, porque
‫não conseguimos encontrar nenhum tour para esse ID,
‫e uma resposta JSON simples com
‫um status de falha.
‫Portanto, falha é o que enviamos sempre que temos um código 400.
‫E então apenas uma propriedade de
‫mensagem, ID inválido.
‫Tudo bem.
‫E então vamos testar isso agora.
‫Portanto, temos nosso 23.
‫E, de fato, 404 não encontrado, ID inválido.
‫Então foi exatamente isso que acabamos de fazer
‫e parece que está funcionando, certo?
‫Outra solução que
‫poderíamos implementar aqui
‫também seria apenas fazer esse
‫teste depois de fazer o tour aqui.
‫Assim, obteríamos o ID, então
‫tentaríamos encontrar um tour, e se
‫não houvesse nenhum tour,
‫bem, então diríamos que o ID é inválido.
‫Então, vamos comentar este, duplicado, apenas
‫para que possamos realmente manter as duas soluções aqui.
‫E então podemos dizer, se não houver turnê, ok?
‫Então, basicamente, o resultado
‫aqui, se nenhum tour for
‫encontrado, bem, essa variável é basicamente indefinida,
‫e podemos testar isso aqui, assim.
‫Portanto, se não houver um tour, se o tour for basicamente
‫indefinido, enviaremos de volta essa mensagem de erro.
‫Então, vamos testar isso também.
‫E, de fato, nos dá o mesmo resultado.
‫Ok, e assim,
‫você aprendeu a especificar
‫parâmetros em uma URL, assim, ok?
‫Então você aprendeu como ler esses
‫parâmetros da URL, usando req dot params.
‫Bem, e então usamos aquele ID, aquele parâmetro, a fim
‫de encontrar um passeio com aquele ID exato.
‫Então foi isso que fizemos aqui, nesta linha, certo?
‫Esse era o objetivo deste vídeo,
‫então vamos agora passar para o próximo.