【问题标题】:Joi nested when validation验证时嵌套的 Joi
【发布时间】:2022-02-18 09:30:32
【问题描述】:

我正在尝试根据父对象中的值有条件地验证嵌套对象。

const schema = Joi.object({
    a: Joi.string(),
    b: Joi.object({
        c: Joi.when(Joi.ref('..a'), { is: 'foo', then: Joi.number().valid(1), otherwise: Joi.number().valid(2) }),
    }),
});

const obj = {
    a: 'foo',
    b: {
        c: 2,
    },
};

在这个例子中,我想得到一个 c 必须为 1 的错误,但验证通过了。我已经尝试过参考和不参考,但我显然对 Joi 的工作原理有一些基本的误解。有什么帮助吗?

【问题讨论】:

    标签: javascript node.js validation joi


    【解决方案1】:

    在您的Joi.ref() 电话中,您还需要一个.。 .. 将上升到父树,然后是另一个点来表示属性。因此,对于您的情况,它将转到父 .. 然后获取 a 属性 parent.a

    使用Joi playground 这对我有用:

    Joi.object({
        a: Joi.string(),
        b: Joi.object({
            c: Joi.when(Joi.ref('...a'), {is: 'foo', then: Joi.number().valid(1), otherwise: Joi.number().valid(2)})
        })
    })
    

    【讨论】:

    • 成功了,谢谢!还要感谢有关 Joi 游乐场的提醒。
    猜你喜欢
    • 2019-03-23
    • 2018-02-27
    • 2020-06-01
    • 2021-06-04
    • 1970-01-01
    • 2016-09-14
    • 2016-02-19
    • 2020-05-04
    • 2020-01-17
    相关资源
    最近更新 更多