Manipulando erros de validação do Mongoose - onde e como?
Eu estou tentando decidir como eu quero lidar com erros de validação no Mongoose.
Mensagens de erro personalizadas usando o validador de nóEu defini minhas próprias regras de validação usandovalidador de nó, por exemplo:
UserSchema.path('username')
.validate(function (username) {
return validator.check(username).notEmpty()
}, 'Username cannot be blank')
Que irá gerar um erro que se parece com isso:
username:
{ message: 'Validator "Username cannot be blank" failed for path username',
name: 'ValidatorError',
path: 'username',
type: 'Username cannot be blank' },
Usando o validador de mangustoNo entanto, o validador de nó fornece suas próprias mensagens de erro. Se eu usar omongoose-validator Módulo de nó para conectar o validador de nó diretamente ao meu esquema, então posso usar essas mensagens de erro diretamente:
var UserSchema = new Schema({
name: { type: String, validate: [validate('notEmpty')] }
});
Que irá gerar uma mensagem de erro que se parece com:
name:
{ message: 'Validator "String is empty" failed for path name',
name: 'ValidatorError',
path: 'name',
type: 'String is empty' } }
Eu também posso fornecer uma mensagem de erro personalizada aqui também:
var UserSchema = new Schema({
name: { type: String, validate: [validate({message: 'Name cannot be blank' }, 'notEmpty')] }
});
Mangustorequired
bandeiraO mangusto permite definir um campo conforme necessário:
var UserSchema = new Schema({
name: { type: String, required: true }
});
Que irá gerar uma mensagem de erro que se parece com:
name:
{ message: 'Validator "required" failed for path name',
name: 'ValidatorError',
path: 'name',
type: 'required' } }
A questãoParece que esses validadoresquer você usar suas mensagens de erro internas. Por exemplo, quero declarar um campo comorequired
como visto acima, mas não consigo encontrar uma maneira de personalizar a mensagem de erro. E o módulo validador de mongoose não suportava mensagens personalizadas até muito recentemente, o que me faz pensar que elas são um anti-padrão no nível do modelo.
Qual é a melhor maneira de implementar esses validadores? Devo deixá-los gerar seus próprios erros e depois interpretá-los de alguma forma depois?