是否有规定的方法在环回中创建自定义验证器?例如,假设我想创建类似的东西:
def set_location
ip = request.ip
@user_location = Geocoder.search(ip)
end
请注意我知道:
Validatable.validatesRange('aProperty', {min: 0, max: 1000})
我使用validates()的问题是validFn无权访问这些选项。所以,我被迫硬编码这个逻辑;并为需要此类验证的每个属性创建自定义方法。这是不可取的。
同样,我熟悉:
Validatable.validates(propertyName, validFn, options)
不幸的是,我认为甚至无法为hookFn()声明选项。我没有这个特定的需求(至少,还没有)。这只是我探索的一种途径,可以解决我的问题。
任何建议表示赞赏。提前谢谢!
答案 0 :(得分: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();
}
由于该函数名称并未在其他地方使用,并且(在这种情况下)函数很短,我也尝试使用匿名函数:
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"
]
}
答案 1 :(得分:0)
您要找的是validatesLengthOf()
。例如:
Validatable.validatesLengthOf('aProperty', {min: 0, max: 1000});
以下是文档链接: All the methods of Validatable class和 Model-wise validation