【问题标题】:Mongoose failing to validate array propertiesMongoose 无法验证数组属性
【发布时间】:2013-10-23 04:14:44
【问题描述】:

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

【问题讨论】:

    标签: validation node.js mongoose


    【解决方案1】:

    我认为您不需要在英语中使用 []:,如果您包含它们,则摆弄咖啡脚本编译器上的代码会导致错误。这可能就是您的验证无法以这种格式工作的原因。试试吧:

    definitions:
      english:
        type: String
        validate: [ shouldFail, "testing" ]
        required: true
    

    【讨论】:

    • 你是对的。 Coffeescript 的出现与我的预期不同。我对 Mongoose 中数组属性的定义还是有些疑惑。我将编辑我的问题,因为这里没有太多的格式化空间。
    • 等等,我想我现在明白了。我需要类型周围的数组标记。所以我的定义是一样的,除了type: [String]...我想。
    • 如果我在 JS 中定义它,我会做 definitions: ({ english: {type: String, validate: [shouldFail, 'testing'], required: true}}) 所以无论如何你通过咖啡脚本得到那种输出是要走的路(我认为这是删除英语上的 []:和而是使用缩进,因此它将其定义为对象而不是数组。
    【解决方案2】:

    我可以看到问题和选择的答案已经很老了,但我认为再详细说明一下可能仍然有用。

    好像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"
        ]
      ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-09
      • 1970-01-01
      • 1970-01-01
      • 2019-06-03
      • 2018-03-11
      • 1970-01-01
      相关资源
      最近更新 更多