‫Instrutor Masculino: Finalmente, vamos agora
‫lidar com os erros de validação do Mongoose.
‫Então, lembra como tentamos atualizar um tour com alguns
‫dados inválidos aqui, e
‫então obtivemos esse tipo de erro?
‫OK.
‫E vamos tentar adicionar outro.
‫Então, um nome muito curto, ok?
‫E porque isso não é permitido, de novo.
‫Ah, e agora não podemos mais ver nosso erro
‫porque agora estamos em produção.
‫E é claro que esse erro
‫agora não foi tratado corretamente.
‫Não está marcado como operacional.
‫Portanto, lembre-se
‫de que recebemos esse tipo de mensagem de erro genérica de volta.
‫OK?
‫Portanto, apenas para ver o erro que tivemos antes,
‫vamos voltar rapidamente ao desenvolvimento.
‫Então npm start.
‫E, envie-o agora
‫novamente.
‫E agora recuperamos nossos erros de desenvolvimento, certo?
‫Porque agora eu
‫quero mostrar como podemos realmente criar uma mensagem de erro significativa
‫com base em tudo isso, o que temos aqui.
‫Agora está certo.
‫Portanto, dentro do nosso
‫erro, obtemos as propriedades do erro.
‫E essa propriedade em si é
‫um objeto que contém muitos objetos, e
‫cada um deles é para um dos campos que contém um erro.
‫Tudo bem?
‫Portanto, o primeiro aqui é para a duração do passeio.
‫Então o segundo é para a dificuldade,
‫isso também está errado.
‫E o terceiro é para a avaliação, ok?
‫Então, cada um deles tem, na verdade, uma boa mensagem de erro, certo?
‫Então, basicamente aquele que definimos em nosso esquema Mongoose.
‫E agora queremos extrair essas
‫três mensagens daqui
‫e colocá-las todas em uma única string, certo?
‫Então, vamos fazer isso.
‫OK.
‫E,
‫novamente, vou começar criando a condicional aqui.
‫Então if (erro),
‫e realmente vamos dar uma olhada.
‫Então aqui está o erro.
‫Temos os erros, todos eles.
‫E eu preciso rolar aqui.
‫E sim, então aqui está o nome.
‫Então, erro. nome é ValidationError, certo?
‫Então, vamos pegar isso.
‫OK.
‫E então, novamente, é um erro criado por Mongoose.
‫Assim como o
‫primeiro, e eles parecem semelhantes, ok.
‫Agora eu não quero isso aqui.
‫Mas ao invés disso
‫eu quero que o erro seja igual a
‫handleValidationErrorDB, e mande o erro, ok?
‫Agora vamos copiar novamente.
‫Tudo bem.
‫E vamos novamente, simplesmente comece criando nossa mensagem.
‫Dados de entrada inválidos.
‫E então vamos retornar o erro.
‫Portanto, novo AppError (mensagem, 400).
‫Então o VS Code
‫já reconheceu que eu queria digitar exatamente isso, certo?
‫Agora, para criar uma grande
‫string de todas as strings de todos os erros,
‫basicamente temos que fazer um loop sobre todos esses
‫objetos e, em seguida, extrair todas as mensagens de erro em um novo array.
‫Então, vamos novamente, dar uma olhada nisso.
‫OK.
‫Portanto, o objeto que contém todos
‫os objetos contém erros, certo?
‫Portanto, temos um erro para o nome, um para
‫a dificuldade e um para as avaliaçõesMédia.
‫E então vamos basicamente fazer um loop sobre esse objeto de erros.
‫OK?
‫E em JavaScript, usamos Object. valores para
‫basicamente fazer um loop sobre um objeto.
‫Portanto, os elementos de um objeto.
‫Tudo bem?
‫Portanto, vamos criar uma variável aqui chamada erros, que novamente
‫será um array de todas
‫as mensagens de erro por enquanto,
‫e agora Object. valores.
‫E então queremos os valores de errar. erros, certo?
‫E agora faça um loop sobre eles usando um mapa.
‫E então, em
‫cada iteração, vamos simplesmente retornar a mensagem de erro, ok?
‫Então, apenas para ter certeza de que estamos todos na
‫mesma página aqui, o Objeto. valores são esses objetos, ok?
‫Então, esse objeto, e esse objeto, e o próximo, certo?
‫Então, esses são os valores.
‫E agora tudo
‫o que temos que fazer para extrair
‫a mensagem é dizer valor. mensagem, ok?
‫Assim . mensagem.
‫Então, basicamente o valor atual, ou digamos
‫o elemento atual,
‫gosto de usar o elemento para
‫isso e queremos retornar el. mensagem.
‫OK.
‫E agora, é claro, isso não deveria estar aqui.
‫E provavelmente você já percebeu isso.
‫Então, na verdade, é aqui que queremos isso, certo?
‫E agora tudo o
‫que precisamos fazer é inserir isso em nossa sequência de mensagens, certo?
‫Erros, e agora simplesmente juntamos todos eles
‫em uma string usando ponto e espaço, certo?
‫E você verá, em um segundo, por que isso acontece.
‫Tudo bem.
‫Portanto, vamos voltar à produção aqui.
‫Executando nosso script de início de produção.
‫Tente novamente agora e vamos esperar e
‫bam!
‫Aqui vamos nós!
‫Portanto, dados de entrada inválidos.
‫Então, a primeira string de erro deve ter
‫mais ou igual a 10 caracteres.
‫Depois o
‫segundo e o terceiro.
‫Perfeito.
‫E foi por isso que usei o período e o espaço, certo?
‫Então, basicamente separar essas três strings com um
‫ponto e um espaço, certo?
‫E agora isso parece uma mensagem de
‫erro muito bem formatada que todos podem entender facilmente.
‫Direito?
‫Então, basicamente terminamos aqui.
‫Tudo bem.
‫Agora poderíamos ter cometido esse erro, tratando do
‫erro, muito mais completo ainda.
‫Por exemplo, poderíamos definir diferentes níveis de gravidade do erro, como dizer,
‫este erro não é tão importante, este
‫erro é médio importante
‫e este erro é muito importante ou mesmo crítico.
‫E também poderíamos enviar um e-mail para algum
‫administrador sobre erros críticos.
‫E realmente, há muitas coisas que podemos implementar.
‫Mas de novo, em um tipo de aplicação pequena como essa,
‫o que temos aqui já é muito bom, ok?
‫Portanto, esta é uma estratégia bastante robusta
‫que já implementamos
‫aqui, e estou muito feliz com ela, ok?
‫Então toda essa lógica aqui com os erros operacionais
‫que implementamos aqui,
‫então isso já é bastante sofisticado.
‫OK?
‫Agora, se algum dia encontrarmos outro erro que
‫queremos marcar como operacional, é claro
‫que tudo o que teremos
‫que fazer é algo semelhante ao que temos aqui, certo?
‫Então, basicamente, implemente outra função para aquela e retorne
‫nosso próprio erro operacional para que a
‫produção do erro de envio
‫possa realmente enviar esse erro operacional para
‫o cliente, certo?
‫Ok, e com isso dito,
‫nosso controlador de erro está realmente concluído.
‫Mas ainda existem alguns outros erros que
‫precisamos lidar que estão completamente fora do Mongo ou mesmo do Express.
‫E faremos isso no restante desta seção.