繁体   English   中英

Joi - 从数组的第一个元素访问对象项属性

[英]Joi - Access object item property from first element of array

我有我的验证架构:

const schema2 = Joi.object({
    benefits: Joi.array().items(Joi.object({
        specification: Joi.object({
            type: Joi.string().valid("ORDER_FIXED_DISCOUNT", "UNIT_PERCENTAGE_DISCOUNT").required(),
        }).required()
    })).min(1).max(1).required(),
    offerCriteria: Joi.array().items(Joi.object({
        type: Joi.string().valid("CONTAINS_OFFERS").required(),
        offers: Joi.array().items(Joi.object({
            quantity: Joi.number().when(Joi.ref("....benefits.0.specification.type"), {
                is: Joi.string().valid("ORDER_FIXED_DISCOUNT"),
                then: Joi.required(),
                otherwise: Joi.forbidden()
            }),
            promotionEntryPoint: Joi.boolean().when(Joi.ref("....benefits.0.specification.type"), {
                is: Joi.string().valid("ORDER_FIXED_DISCOUNT"),
                then: Joi.required(),
                otherwise: Joi.forbidden()
            })
        })).min(1).required()
    })).min(1).max(1).required()
});

我的目标是建立需要offerCriteria.offers.quantityofferCriteria.offers.quantitypromotionEntryPoint如果benefits.specification.type
ORDER_FIXED_DISCOUNT否则设置为禁止。

我在条件下尝试过这个,但没有一个能正常工作:

  • "....benefits.specification.type",
  • "....benefits.0.specification.type",
  • Joi.ref("....benefits.0.specification.type"),
  • Joi.ref("....benefits.specification.type")

我找到了解决这个问题的方法:

quantity: Joi.number().when("$specification_type", {
                is: Joi.string().valid("ORDER_FIXED_DISCOUNT"),
                then: Joi.required(),
                otherwise: Joi.forbidden()
            }),

验证时在上下文中设置$specification_type

schema.validate(data, {context: {specification_type: data.benefits[0].specification.type}}})

我仍在寻找一种使用模式而不是上下文的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM