3

我正在使用 Joi 库来验证一个对象。当另一个可选属性(在同一对象的同一级别)属于某种类型(例如字符串)时,我想使某个属性成为必需的。Joi 文档显示了这个例子:

const schema = {
    a: Joi.when('b', { is: true, then: Joi.required() }),
    b: Joi.boolean()
};

但是,我不想检查 b (例如)是否为真,而是想检查它是否是一个字符串。我试过这个:

const schema = {
    a: Joi.when('b', { is: Joi.string(), then: Joi.required() }),
};

但这似乎不起作用。如果我从对象中完全删除 b,Joi 似乎仍然期望 a 是必需的。如果 b 不在对象中,我不希望在 a 上放置任何验证。

我找不到任何其他人这样做的例子 - 任何人都可以帮忙吗?

4

1 回答 1

0

我们设法使用object.with解决了这个问题。如果存在一个密钥(例如 a),那么它的对等点也必须存在(例如 b)。

然而,这并不理想,因为虽然我们能够指定 a 应该是 Joi.string(),但 object.with 只是在寻找它的存在而不是它的类型。因此,如果存在非字符串 a,则会为 a 抛出“应该是字符串”错误。a 不是字符串应该是完全可以的 - 这应该意味着 b 不是强制性的。我希望这是有道理的。

于 2016-10-21T06:13:40.060 回答