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

Can I define a custom validation with options for Loopback?

是否有规定的方法可以在环回中创建自定义验证器?例如,假设我想创建如下内容:

Validatable.validatesRange('aProperty', {min: 0, max: 1000})

请注意,我知道:

Validatable.validates(propertyName, validFn, options)

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

同样,我熟悉的有:

Model.observes('before save', hookFn)

不幸的是,我什至没有办法为 hookFn() 声明选项。我没有这种特定需求(至少现在还没有)。这只是我探索的一条途径,作为解决我问题的可能替代方案。

如有任何建议,我们将不胜感激。提前致谢!

您要找的是validatesLengthOf()。例如:

Validatable.validatesLengthOf('aProperty', {min: 0, max: 1000});

这里是文档链接: All the methods of Validatable classModel-wise validation.

https://docs.strongloop.com/display/public/LB/Validating+model+data

中提到了如何完成此操作

You can also call validate() or validateAsync() with custom validation functions.

这会将您带到此页面 https://apidocs.strongloop.com/loopback-datasource-juggler/#validatable-validate

这提供了一个例子。

我自己试了一下...

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

并且由于该函数名称在其他任何地方都没有真正使用,并且(在这种情况下)该函数很短,我还尝试了匿名函数:

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

当点数小于零时,它会抛出如下所示的验证错误。

{
  "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"
        ]
      }