1
resposta

[Dúvida] Validação de campos em requisições de update.

A validação feita pelo professor dos campos obrigatórios a serem passados só funciona na requisição POST, mas ao replicar a mesma abordagem ao fazer um PUT com a id do livro, ele permite que se faça uma requisição com um body vazio. porque?

1 resposta

Oi, Gabriel.

O motivo pelo qual o erro de validação (o ValidationError que você configurou) não aparece por padrão no método PUT (ou patch) é que o Mongoose, por uma questão de performance e histórico de design, não executa os validadores do Schema em operações de atualização, apenas na criação (POST).

Por que isso acontece?

  • POST: O Mongoose cria uma nova instância da classe (Model), valida as propriedades e depois salva.
  • PUT/PATCH: Por padrão, o Mongoose envia o comando direto para o banco de dados MongoDB sem instanciar o documento completo no servidor Node.js, ignorando as regras de required: true que você definiu no Schema.

Ao adicionar { runValidators: true }, você diz ao Mongoose: "Antes de enviar essa atualização para o banco, verifique se os dados seguem as regras do meu Schema".

O que acontece após a mudança?

Com essa alteração, se você enviar um corpo vazio ou faltar um campo obrigatório no PUT:

  1. O Mongoose vai gerar um mongoose.Error.ValidationError.
  2. O seu catch(erro) vai capturar isso e passar para o next(erro).
  3. O seu manipuladorDeErros.js vai identificar o tipo do erro e instanciar a nova classe ErroValidacao(erro) que você criou.
  4. O front-end receberá o status 400 com as mensagens detalhadas.

Essa pequena configuração garante que a integridade dos dados seja respeitada em qualquer alteração, não apenas na criação.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!