这就是我使用带有有条件必填字段(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
有一个值!
答案 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)
}
})