是否可以要求一组已定义字段中的至少一个字段?
Is it possible to require at least one field from a set of defined fields?
给出这样的定义:
const querySchema = joi.object({
one: joi.string().min(1).max(255),
two: joi.string().min(1).max(255),
three: joi.string().min(1).max(255),
});
有没有办法要求至少一个这些字段?我不在乎哪个。
注意:为此 提供的解决方案不适合我,因为我有 7 个字段并且它们可能会增长,所以做所有可能的组合是一个不行。
在 Joi API Reference 中找不到任何可能对这个用例有用的方法。
非常感谢任何帮助。
如果您真的不关心需要哪一个,那么您可以使用object().min(1)
.[=确保对象中至少有一个键。 16=]
const querySchema = joi.object({
one: joi.string().min(1).max(255),
two: joi.string().min(1).max(255),
three: joi.string().min(1).max(255),
}).min(1);
至少需要一把钥匙(one
、two
、three
)。名称与这三个不同的密钥将被拒绝。
除了@Ankh 建议的方法之外,在 documentation 中找到了另一种方法,但我之前找不到它:
const schema = joi.object({
a: joi.number(),
b: joi.number(),
}).or('a', 'b');
如果需要一组特定的键,这种方法很好,而当要求非常精确时,@Ankh 的方法更好,因为我这个问题标题并且你有很多键,所以我选择他的答案而不是我的作为正确的。
只是想以另一种方式离开这里。
给出这样的定义:
const querySchema = joi.object({
one: joi.string().min(1).max(255),
two: joi.string().min(1).max(255),
three: joi.string().min(1).max(255),
});
有没有办法要求至少一个这些字段?我不在乎哪个。
注意:为此
在 Joi API Reference 中找不到任何可能对这个用例有用的方法。
非常感谢任何帮助。
如果您真的不关心需要哪一个,那么您可以使用object().min(1)
.[=确保对象中至少有一个键。 16=]
const querySchema = joi.object({
one: joi.string().min(1).max(255),
two: joi.string().min(1).max(255),
three: joi.string().min(1).max(255),
}).min(1);
至少需要一把钥匙(one
、two
、three
)。名称与这三个不同的密钥将被拒绝。
除了@Ankh 建议的方法之外,在 documentation 中找到了另一种方法,但我之前找不到它:
const schema = joi.object({
a: joi.number(),
b: joi.number(),
}).or('a', 'b');
如果需要一组特定的键,这种方法很好,而当要求非常精确时,@Ankh 的方法更好,因为我这个问题标题并且你有很多键,所以我选择他的答案而不是我的作为正确的。
只是想以另一种方式离开这里。