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

How provide dynamic message in custom loopback validation?

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。如何做到这一点?

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

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();
    }
});

这有效,但请记住,您将拥有 +1 custom 代码和消息,请参阅 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": "..."
  }
}