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)
}
})
这就是我使用 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)
}
})