SimpleSchema:有条件的必填字段不起作用

时间:2017-07-06 08:23:53

标签: javascript meteor simple-schema

这就是我使用带有有条件必填字段(module)的SimpleSchema进行验证的方法。因此,只有在type具有值' start'

时才需要这样做

客户端

const   module = 'articles',
        _id = 'bmphCpyHZLhTc74Zp'

console.log(module, _id)
// returns as expected 'articles' and 'bmphCpyHZLhTc74Zp'

example.call(
    {
        type  : 'start',
        module: module,
        _id   : _id
    },
    (error, result) => {
        if (error)  console.log(error)
    }
)

服务器

example = new ValidatedMethod({
    name    : 'example',
    validate: new SimpleSchema({
        _id : { type: SimpleSchema.RegEx.Id },
        type: {
            type         : String,
            allowedValues: ['start', 'stop'] },
        module: {
            type         : String,
            optional     : true,
            allowedValues: ['articles'],
            custom       : function() {
                if (this.field('type').value === 'start') return 'required'
                return null
            }
        }
    }).validator(),

    run({ type, _id, module }) {
        console.log(_id, module)
    }
})

但我确实收到错误"validation-error",原因为"Module is required"

我不明白,你可以看到module有一个值!

1 个答案:

答案 0 :(得分:0)

发生验证错误是因为您没有检查模块是否包含任何值(我对前一个问题的回答包含错误),所以每当type值等于start时,方法抛出错误必填字段。它甚至不检查module字段是否有任何值。我发布你的固定代码。

example = new ValidatedMethod({
  name    : 'example',
  validate: new SimpleSchema({
    _id : { type: SimpleSchema.RegEx.Id },
    type: {
      type: String,
      allowedValues: ['start', 'stop'] 
    },
    module: {
      type: String,
      optional: true,
      allowedValues: ['articles'],
      custom: function() {
        if (this.field('type').value === 'start') {
          if(!this.isSet || this.value === null || this.value === "") {
            return 'required'
          }
        }
      }
    }
  }).validator(),
  run({ type, _id, module }) {
    console.log(_id, module)
  }
})