我可以使用Loopback选项定义自定义验证吗?

Cli*_*ney 4 strongloop loopbackjs

是否有规定的方法在环回中创建自定义验证器?举个例子,假设我想创建类似的东西:

Validatable.validatesRange('aProperty', {min: 0, max: 1000})
Run Code Online (Sandbox Code Playgroud)

请注意我知道:

Validatable.validates(propertyName, validFn, options)
Run Code Online (Sandbox Code Playgroud)

我使用validates()的问题是validFn无权访问这些选项.所以,我被迫硬编码这个逻辑; 并为需要此类验证的每个属性创建自定义方法.这是不可取的.

同样,我熟悉:

Model.observes('before save', hookFn)
Run Code Online (Sandbox Code Playgroud)

不幸的是,我认为甚至无法为hookFn()声明选项.我没有这个特定的需求(至少,还没有).这只是我探索的一种途径,可以替代解决我的问题.

任何建议表示赞赏.提前致谢!

use*_*342 17

https://docs.strongloop.com/display/public/LB/Validating+model+data上提到了如何执行此操作

您还可以使用自定义验证函数调用validate()或validateAsync().

这将引导您访问此页面https://apidocs.strongloop.com/loopback-datasource-juggler/#validatable-validate

这提供了一个例子.

我自己试了一下......

  Question.validate('points', customValidator, {message: 'Negative Points'});
  function customValidator(err) {
    if (this.points <0) err();
  }
Run Code Online (Sandbox Code Playgroud)

由于该函数名称并未在其他任何地方使用,并且(在这种情况下)函数很短,我也尝试使用匿名函数:

Question.validate('points', 
        function (err) { if (this.points <0) err(); }, 
        {message: 'Question has a negative value'})
Run Code Online (Sandbox Code Playgroud)

当点小于零时,它会抛出下面显示的验证错误.

{
  "error": {
    "name": "ValidationError",
    "status": 422,
    "message": "The `Question` instance is not valid. Details: `points` Negative Points (value: -100).",
    "statusCode": 422,
    "details": {
      "context": "Question",
      "codes": {
        "points": [
          "custom"
        ]
      },
      "messages": {
        "points": [
          "Negative Points"
        ]
      }
Run Code Online (Sandbox Code Playgroud)