【发布时间】:2019-06-21 21:02:43
【问题描述】:
我正在尝试根据不同键 key2 的值有条件地验证键 key1。 key1 来自一组值,假设 ['a', 'b', 'c'] 和 key2 也应根据 key1 {a: ['a1','a2','a3'], b: ['b1','b2','b3'], c: ['c1','c2','c3'] } 的值进行约束。
如果key1 是a,那么key2 必须是['a1','a2','a3'] 等之一。key2 的值集不能从key1 计算。
我尝试了以下模式,使用 ref,希望 joi.ref('key1') 能得到我的价值:
const obj = {a: ['a1','a2','a3'], b: ['b1','b2','b3'], c: ['c1','c2','c3'] }
const schema = {
key1: joi.only(['a', 'b', 'c']),
key2: joi.only(obj[joi.ref('key1')])
}
我得到了错误:
“无法调用允许/有效/无效且未定义”
我已经用指定的选项映射尝试过:
const schema = {
key1: joi.only(['a', 'b', 'c']),
key2: joi.only(joi.ref('key1', {map: [['a', ['a1','a2','a3']],['b', ['b1','b2','b3']],['c', ['c1','c2','c3']]]}))
}
对于{key1:'a', key2:'a1'},我得到了ValidationError:
"child "key2" 失败,因为 ["key2" 必须是 [ref:key1]] 之一]
但奇怪的是 {key1:'a', key2:'a'} 得到验证没有错误,这表明 joi.ref 回退到原始值。
所以 refs 没有按预期工作,让我们尝试何时切换:
const schema = {
key1: joi.only(['a', 'b', 'c']),
key2: joi.when('key1', {switch: [{is: 'a', then: joi.only(['a1','a2','a3'])},{is: 'b', then: joi.only(['b1','b2','b3'])},{is: 'c', then: joi.only(['c1','c2','c3'])}]})
}
但这只能让我明白:
"选项必须至少有 'then' 或 'otherwise' 之一"
如果我提供otherwise,它还需要is。有什么简单的方法可以解决这个问题吗?
【问题讨论】:
标签: javascript joi