‫Narrador: Bem-vindo ao último vídeo desta seção.
‫E neste,
‫vamos prevenir a poluição dos
‫parâmetros, usando mais um pacote NPM.
‫Mas antes de instalar esse pacote,
‫vamos examinar o erro.
‫Mas antes de fazer isso, vamos ao Postman e
‫ver por que realmente
‫precisamos evitar a poluição dos parâmetros em primeiro lugar.
‫Então, primeiro, precisamos fazer o login.
‫Ok, então, com esse usuário e essa senha.
‫Agora podemos usar a rota Get All Tours.
‫Tudo bem, então o que farei
‫agora aqui é adicionar alguns parâmetros à string de consulta.
‫Então, vamos ver, eu quero classificar por duração
‫e, ao mesmo tempo, também quero classificar por preço.
‫E isso não faz muito sentido
‫porque estamos preparados para ter apenas um parâmetro de classificação.
‫Então, vamos ver o que realmente temos com isso.
‫E, de fato, recebemos um erro dizendo isso. string de consulta. organizar. dividir não é uma função.
‫E isso está acontecendo no apiFeatures. js na linha 23.
‫Vamos abrir isso e aqui, na linha 23 é
‫onde ocorre o erro.
‫Portanto, ele está tentando dividir a propriedade sort aqui,
‫que esperamos ser uma string.
‫Mas agora, uma vez que o definimos duas
‫vezes, classifique uma vez e, em seguida, classifique duas vezes, o express
‫irá, na verdade, criar um array com esses dois valores, duração e preço.
‫Deixe-me mostrar isso para você.
‫Console. registro.
‫Agora estou copiando.
‫Ok, tente novamente.
‫Aqui está o mesmo erro e
‫como eu disse, é na verdade uma matriz com duração e preço.
‫E é claro que não podemos dividir porque a divisão
‫só funciona em strings, certo?
‫E, portanto, esse é um problema típico do
‫qual os invasores podem fazer uso.
‫Tudo bem, basicamente agora vamos
‫usar um middleware que simplesmente removerá
‫esses campos duplicados, certo?
‫E esse, vamos instalá-lo.
‫É chamado de
‫HPP, que significa poluição do parâmetro HTTP.
‫Tudo bem.
‫Vamos solicitá-lo rapidamente aqui.
‫Tudo bem, e então, este é mais um muito simples.
‫Tudo o que precisamos fazer é um app. use e ligue para a HPP.
‫Portanto, evite a poluição dos parâmetros.
‫E este aqui novamente deve ser usado no final, ok,
‫porque o que ele faz é limpar a
‫string de consulta, certo?
‫Então, vamos tentar de novo.
‫Está demorando um pouco e vamos lá.
‫Portanto, o erro desapareceu e agora ele está
‫usando apenas o último.
‫Então, está classificando meu preço agora
‫e, de fato, começamos com o mais baixo
‫e depois subimos 497, até chegar ao mais caro
‫de quase 3.000, certo?
‫Então isso é meio que consertado, mas na verdade queremos algumas
‫propriedades ou campos duplicados em alguns casos, certo?
‫Por exemplo, podemos querer pesquisar passeios com a
‫duração de nove e cinco.
‫Portanto, lembre-se de que em nossa
‫API podemos fazer isso, então a duração é igual a
‫cinco e podemos dizer, ao mesmo tempo, duração nove, certo?
‫E queremos que isso realmente funcione, mas agora não.
‫Só encontra o passeio com nove dias, certo?
‫Mas se não tivéssemos, ou middleware HPP.
‫Então, vamos desativá-lo.
‫Então, se não o tivéssemos
‫ativo, encontraríamos três tours, um
‫com duração cinco, aqui com duração nove e aqui outro
‫com duração cinco.
‫Ok, e neste caso, este é
‫realmente o comportamento esperado.
‫Então, o que podemos fazer para poder usar o
‫middleware, mas ainda assim obter
‫o resultado que esperamos aqui, com a
‫duração, podemos colocar alguns parâmetros na lista branca, ok?
‫Então, para esta função HPP, podemos passar mais
‫uma vez um objeto e aí, especificar a lista branca, ok?
‫E a lista branca é simplesmente uma matriz de propriedades
‫para as quais permitimos duplicatas na string de consulta.
‫OK?
‫E a duração é, claro, um deles, certo?
‫Então, vamos tentar de novo.
‫E então, agora ainda temos nossos três resultados como antes.
‫Mas se tentamos com sort, vamos criar uma
‫nova aba aqui.
‫Portanto, se tentássemos com essas
‫classificações duplas, também não deveríamos obter nenhum erro.
‫Bem, agora não estávamos logados, então vamos pegar nosso
‫token de erro aqui.
‫Tente de novo.
‫E agora realmente funciona, não temos nenhum erro.
‫E para que o middleware HPP esteja fazendo seu trabalho.
‫Tudo bem?
‫Também feche este
‫aqui, e agora devemos especificar alguns outros campos
‫em nossa lista branca, porque por exemplo
‫queremos pesquisar este também, ou a quantidade de avaliações.
‫E então vamos apenas copiar todos eles aqui em nossa lista branca.
‫Então, a média também.
‫Então também a duração
‫que já temos, e digamos o tamanho máximo do grupo.
‫Também podemos querer a dificuldade.
‫E também o preço.
‫E acho que isso deve ser o suficiente.
‫Tudo bem.
‫E pode parecer
‫um pouco estranho basicamente colocar manualmente todos os nomes de campo aqui e
‫depois poderemos ter que fazer a mesma coisa para os
‫outros recursos, e isso tornará essa lista branca ainda maior, certo?
‫E é claro que poderíamos fazer algumas coisas complexas
‫aqui para obter esses nomes de campo do
‫próprio modelo, mas, mais
‫uma vez, quero mantê-lo simples aqui, ok?
‫E então estou apenas definindo manualmente esses
‫nomes de campo aqui e, em seguida, encerrar o dia, certo?
‫Ok, e isso realmente encerra
‫nossa seção de autenticação, autorização e segurança.
‫E se você quiser se divertir mais com isso,
‫então é claro, você pode tentar implementar algumas das
‫coisas que sugeri naquele vídeo de
‫resumo que mostrei antes com aquele slide com
‫todas essas diferentes medidas de segurança
‫que já implementamos e alguns
‫dos quais eu disse para você experimentar.
‫Então, fique à vontade para fazer isso,
‫ou se não, vamos juntos passar para
‫a próxima seção, que será realmente empolgante novamente, porque então
‫começaremos a modelar os dados
‫e aprenderemos algumas coisas mais avançadas do MongoDB.
‫Mal posso esperar para te ver lá.