【问题标题】:Joi 'when/is' syntax - how to check for type?Joi 'when/is' 语法 - 如何检查类型?
【发布时间】:2017-03-02 08:35:18
【问题描述】:

我正在使用 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 上放置任何验证。

我找不到其他人这样做的例子 - 谁能帮忙?

【问题讨论】:

    标签: javascript node.js validation joi


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-05-05
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 2021-09-10
      • 1970-01-01
      相关资源
      最近更新 更多