‫Instrutor: Portanto, o Mongoose oferece
‫aos desenvolvedores maneiras muito poderosas de validar
‫os dados que entram em nosso modelo.
‫E então, neste vídeo, você aprenderá
‫tudo sobre validação de dados com o Mongoose.
‫Agora, o que exatamente significa validação realmente significa?
‫Bem, a validação consiste basicamente em verificar se os valores
‫inseridos estão no formato correto para cada
‫campo em nosso esquema de documento e também se
‫os valores foram realmente inseridos para todos os campos obrigatórios.
‫Agora, por outro lado, também temos a higienização,
‫que é para garantir que os dados inseridos estejam
‫basicamente limpos, para que nenhum código malicioso seja
‫injetado em nosso banco
‫de dados ou no próprio aplicativo.
‫Então, nessa etapa, removemos caracteres indesejados,
‫ou mesmo código, dos dados de entrada, certo?
‫E esta é realmente uma etapa crucial,
‫como um padrão de ouro no desenvolvimento de back-end.
‫Para nunca, jamais, aceitar dados de entrada vindos
‫de um usuário como eles são.
‫Portanto, sempre precisamos higienizar os dados recebidos.
‫Mas, de qualquer forma, deixarei a higienização de
‫dados para a seção de segurança do
‫curso, para que
‫nesta palestra possamos nos concentrar inteiramente na validação de dados.
‫E estamos fazendo essa validação de
‫dados bem aqui no modelo.
‫E isso, novamente, por causa do modelo fat
‫e da filosofia do controlador
‫fino, que torna o modelo o
‫lugar perfeito para realizar a validação, certo?
‫E, de fato, o Mongoose já vem com
‫várias ferramentas de validação prontas para usar.
‫E então, vamos agora realmente fazer alguma validação de dados aqui.
‫E, na verdade, já fizemos.
‫Então, quando usamos esse require aqui, ele na verdade já
‫é um validador de dados embutido, certo?
‫Então você vê que usamos um validador como exigido
‫aqui nas opções de tipo de esquema.
‫E required está realmente disponível para todos os tipos de dados.
‫Então, não apenas strings, mas realmente tudo.
‫Números, booleanos, datas ou, realmente, qualquer tipo
‫que você esteja usando.
‫Então, também temos um único aqui, mas
‫observe que, na verdade, ele não é um validador técnico.
‫Ainda produzirá um erro
‫quando tivermos um nome duplicado,
‫mas, novamente, este não é realmente um validador, certo?
‫Mas, obrigatório é um validador, e por
‫isso vou mostrar agora outro que
‫é específico apenas para strings,
‫que é chamado de comprimento máximo e também comprimento mínimo.
‫Portanto, temos o comprimento
‫máximo e como o nome diz, usamos isso
‫para especificar o comprimento máximo que uma string pode ter.
‫E se for mais longo do
‫que isso, então, vai produzir um erro, certo?
‫Então, vamos fazer isso exatamente como fizemos antes
‫com required, onde especificamos um array e, em seguida, definimos o valor.
‫Então, digamos que queremos 40 como o comprimento máximo da string
‫e, em seguida, adicionamos o erro depois disso.
‫Então, basicamente, a mensagem de erro que recebemos.
‫Portanto, o nome de um passeio deve ter
‫menos ou igual a 40 caracteres.
‫Ok, então, esse é o comprimento máximo
‫e também temos o comprimento mínimo.
‫Certo, vamos definir um para 10, então o
‫nome do passeio deve ter mais ou igual a 10 caracteres.
‫Ok, e assim, temos esses dois validadores que
‫estão disponíveis apenas em strings, ok?
‫E, então, vamos realmente tentar isso.
‫Então, vou criar um novo tour aqui.
‫E, este não é um passeio
‫secreto, mas aqui o resto não importa.
‫Vou chamar isso de Tour de Teste e
‫vamos ver quantos personagens temos, então
‫quatro mais um, mais quatro, então
‫temos apenas nove personagens.
‫E, portanto, agora devemos esperar realmente obter um erro.
‫Então, vamos tentar isso.
‫E, de fato, um nome de
‫passeio deve ter mais ou igual a 10 caracteres.
‫Ótimo, mas agora que tal atualizar os tours?
‫Então, vamos pegar um desses aqui.
‫Portanto, temos este tour de teste dois aqui,
‫então vamos tentar atualizá-lo.
‫Então, vamos para nossa rota de turnê atualizada.
‫E agora vamos aqui, alterar o nome para Teste, enviar
‫a solicitação e, obteremos o mesmo erro.
‫Agora, isso só funciona por causa de
‫uma configuração que definimos
‫há muito tempo, quando implementamos este manipulador de atualização.
‫Então, deixe-me mostrar isso rapidamente no controlador de turnê.
‫Excluir e atualizar e, portanto, é por causa
‫desta opção aqui runValidators, definida
‫como true, que os validadores são executados novamente.
‫Se eu
‫definir agora como falso, Mongoose aceitará alegremente esse nome.
‫E, de fato, é verdade.
‫Então, vamos definir de volta para
‫algo mais longo,
‫não importa, ok, e se eu definir de volta
‫para verdadeiro, então ele não
‫deve aceitar e, de fato, receberemos nosso erro de volta, certo?
‫Então, só queria
‫mostrar rapidamente o fato dessa configuração.
‫Tudo bem, então, sim, agora estão funcionando.
‫Vamos tentar mais alguns validadores aqui.
‫Por exemplo, agora em números.
‫Então, vamos ver a média das avaliações.
‫E sabemos que a
‫avaliação deve estar sempre entre um e zero, e sabemos que
‫uma avaliação deve estar sempre entre um e cinco, certo?
‫E assim, muito semelhante ao comprimento mínimo e máximo,
‫em números nós simplesmente temos mínimo e máximo.
‫Portanto, o mínimo que queremos é um e, em
‫seguida, novamente nossa mensagem de erro.
‫Portanto, a classificação deve ser acima de 1. 0, digamos.
‫E então o máximo é cinco.
‫Deve estar abaixo de 5. 0, ok, e vamos testar
‫rapidamente este também.
‫Então, ao criar um novo tour, vamos chamá-lo de Test
‫Tour Amazing porque tem uma classificação média de seis.
‫Ok, então vamos ver o que acontece então,
‫e de fato, a classificação deve estar abaixo de cinco.
‫Certo, então, isso de novo não vai
‫funcionar e, claro, também não pode ser zero.
‫Então, deve estar acima de um e,
‫claro, com quatro, vai funcionar e, de fato, aqui está nosso tour.
‫Em seguida, quero restringir este valor de dificuldade aqui
‫a apenas três dificuldades.
‫Então, fácil, médio e difícil.
‫E se o usuário colocar outra
‫coisa, não vai funcionar.
‫Então, vamos tentar isso.
‫Então, o validador que usamos para isso é chamado de enum,
‫ok, e então, aqui podemos passar
‫uma matriz dos valores, basicamente, que são permitidos.
‫Então, temos fácil, temos médio e temos dificuldade.
‫Tudo bem, agora também queremos especificar nossa mensagem de erro aqui,
‫mas no momento isso não é realmente possível, certo?
‫Quer dizer, se adicionarmos outro argumento aqui,
‫então não seria para
‫a mensagem de erro, seria claro para outro valor possível, ok?
‫E então, a solução que precisamos
‫fazer aqui é criar mais um objeto aqui
‫e, então, especificar de fato que estes aqui são os valores.
‫E então, nossa mensagem, certo?
‫E é assim que realmente funciona.
‫Esta notação aqui é apenas
‫uma abreviatura para este objeto completo aqui, certo?
‫Portanto, a dificuldade é: fácil, média ou difícil.
‫Ok, e então, este é um validador muito bom e muito útil que
‫está automaticamente disponível em todas as strings, ok, então, não
‫tente usar este aqui em números, por exemplo.
‫Isso é apenas para strings.
‫E, a propósito, este mínimo e
‫máximo aqui não são
‫apenas para números, mas também funcionará com datas, certo?
‫De qualquer forma, vamos finalmente testar isso também.
‫Então, precisamos mudar o nome, e
‫aqui vamos colocar outra
‫coisa, certo, e de fato, obtemos nosso erro.
‫Se agora colocarmos fácil, então funciona.
‫Ok, e isso é realmente tudo que eu
‫queria mostrar a
‫vocês aqui nesta palestra, mas na verdade existem vários outros validadores.
‫Por exemplo, em strings, você tem um validador de
‫correspondência para verificar se a
‫entrada corresponde a uma determinada expressão regular.
‫Mas, acredito que esses que acabei de mostrar aqui
‫são os validadores integrados mais importantes.
‫E, para uma lista completa de
‫todos eles, é claro, você sempre pode verificar a documentação.
‫Agora também podemos especificar nossos próprios validadores, e
‫isso é exatamente o que faremos
‫no próximo vídeo.