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 mangusto

No 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 bandeira

O 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ão

Parece 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?

questionAnswers(7)

yourAnswerToTheQuestion