如何在自定义回送验证中提供动态消息?

问题描述:

Here是从文档:如何在自定义回送验证中提供动态消息?

User.validate('name', customValidator, {message: 'Bad name'}); 
function customValidator(err) { 
    if (this.name === 'bad') err(); 
}); 
var user = new User({name: 'Peter'}); 
user.isValid(); // true 
user.name = 'bad'; 
user.isValid(); // false 

有验证过程中修改message变量的方法吗?例如,this.name === 'bad'的消息是Bad name,但是当this.name === 'very bad'的消息应该是Very Bad name。如何做到这一点?

突然有一个addError方法与签名errors.add(attr, message, code),所以:

User.validate('name', customValidator); 
function customValidator(err) { 
    if (this.name === 'bad') { 
     this.errors.add('name', `Name is bad`, 'name.bad') 
     err(); 
    } 
    if (this.name === 'very bad') { 
     this.errors.add('name', `Name is very bad`, 'name.very.bad') 
     err(); 
    } 
}); 

这工作,但请记住,你将有+1custom代码和信息,请参阅从粗糙error.details.codes.nameerror.details.messages.name路径json下面:

{ 
    "error": { 
    "statusCode": 422, 
    "name": "ValidationError", 
    "message": "The `Entity` instance is not valid. Details: `name` Name is very bad (value: very bad).", 
    "details": { 
     "context": "Entity", 
     "codes": { 
     "name": [ 
      "name.very.bad", 
      "custom" 
     ], 
     }, 
     "messages": { 
     "name": [ 
      "Name is very bad", 
      "is invalid" 
     ] 
     } 
    }, 
    "stack": "..." 
    } 
}