SimpleSchema:有条件要求的字段不起作用

SimpleSchema: Conditionally required field is not working

这就是我使用 SimpleSchema 和 有条件地 必填字段 (module) 进行验证的方式。因此,仅当 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 根本没有价值!

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

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)
  }
})