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?
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?
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).
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".
Com essa alteração, se você enviar um corpo vazio ou faltar um campo obrigatório no PUT:
mongoose.Error.ValidationError.catch(erro) vai capturar isso e passar para o next(erro).manipuladorDeErros.js vai identificar o tipo do erro e instanciar a nova classe ErroValidacao(erro) que você criou.Essa pequena configuração garante que a integridade dos dados seja respeitada em qualquer alteração, não apenas na criação.