joi 根据另一个字段设置布尔默认值
joi setting boolean default value based on another field
假设这个对象有两个键 a 和 b。 a 是字符串,b 是布尔值。我正在寻找的是,如果 a 为空,则 b 的默认值为 true if not false。
这个架构
Joi.object({
'a': Joi.string(),
'b': Joi.alternatives()
.when('a', {
is: '',
then: Joi.boolean().default(true),
otherwise: Joi.boolean().default(false)
})
})
对象引发错误“无法将备选方案与布尔值组合”
{
a: '',
b: false
}
这可能超出了乔的本意,但我很好奇。
.default() 可以接受带有参数(parent,helpers)的函数,有了 parent 你可以访问任何对象值并做这样的事情:
const schema = Joi.object({
a: Joi.string().allow(''),
b: Joi.boolean().default((parent) => parent.a == '')
})
// Object {value: Object {a: "", b: true}}
schema2.validate({ a: '' })
// Object {value: Object {a: "", b: false}}
schema2.validate({ a: 'aaa' })
假设这个对象有两个键 a 和 b。 a 是字符串,b 是布尔值。我正在寻找的是,如果 a 为空,则 b 的默认值为 true if not false。
这个架构
Joi.object({
'a': Joi.string(),
'b': Joi.alternatives()
.when('a', {
is: '',
then: Joi.boolean().default(true),
otherwise: Joi.boolean().default(false)
})
})
对象引发错误“无法将备选方案与布尔值组合”
{
a: '',
b: false
}
这可能超出了乔的本意,但我很好奇。
.default() 可以接受带有参数(parent,helpers)的函数,有了 parent 你可以访问任何对象值并做这样的事情:
const schema = Joi.object({
a: Joi.string().allow(''),
b: Joi.boolean().default((parent) => parent.a == '')
})
// Object {value: Object {a: "", b: true}}
schema2.validate({ a: '' })
// Object {value: Object {a: "", b: false}}
schema2.validate({ a: 'aaa' })