Mongoose无法验证数组属性

时间:2011-09-28 01:04:20

标签: validation node.js mongoose

我在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 = [ ]并尝试保存。

2 个答案:

答案 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"
    ]
  ]