我在Mongoose中验证数组属性时遇到了一些问题。
当我使用以下定义时,我的shouldFail
方法永远不会被调用,并且记录总是会保存。
shouldFail = (val) ->
console.log "Fail method called with value:"
console.log val
return false
definitions:
english: [
type: String
validate: [ shouldFail, "testing" ]
required: true
]
但是,如果我按以下方式设置验证,则会调用该函数并且不会保存记录。
Sense.path('definitions.english').validate (val) ->
console.log "Validating English"
console.log val
return false
如果可能,我更喜欢使用以前的定义样式。我只是想知道我的定义是否做错了。那是你如何为数组定义验证?
此外,我不确定我设置english
的方式是否影响了这一点。我正在做definitions.english = [ ]
并尝试保存。
答案 0 :(得分:2)
我认为你不需要英语上的[]:摆弄coffeescript编译器上的代码,如果你包含它们会导致错误。这可能是您的验证无法以该格式运行的原因。试试吧:
definitions:
english:
type: String
validate: [ shouldFail, "testing" ]
required: true
答案 1 :(得分:1)
我可以看到问题和选择的答案已经很老了,但我认为再详细说明可能仍然有用。
似乎you can't validate a single element of an array。而是在整个数组上运行验证,并在需要时循环它的值。
假设valid
是验证单个元素的函数:
definitions:
english:
type : [ String ]
validate :
validator : (values) ->
for value in values
if not (valid value) then return false
return true
msg : "At least one not valid"
]
通过设置required
标志,我假设你想确保数组中至少有一个元素。要实现这一点,请添加另一个验证对象:
definitions:
english:
type : [ String ]
validate : [
validator : (values) -> values.length # 0 is a falsy value
msg : "At least one required"
,
validator : (values) ->
for value in values
if not (valid value) then return false
return true
msg : "At least one not valid"
]
]