簡體   English   中英

Joi 嵌套模式

[英]Joi Nested schema

我正在嘗試在 joi 中創建嵌套模式,但它拋出錯誤

[錯誤:Object 模式不能是 joi 模式]

var nestedSchema = joi.object({
    b: joi.number()
});

var base = joi.object({
    a: joi.string(),
    nestedData:joi.object(nestedSchema)
});

我應該如何在 joi 中定義嵌套模式?

盡管 Francesco 的回答有效,但沒有必要使用object.keys() 問題創建者所做的錯誤是將模式作為參數傳遞給joi.object()

因此,創建嵌套模式就像將模式分配給屬於另一個模式的鍵一樣簡單。

const schemaA = Joi.string()
const schemaB = Joi.object({ keyB1: schemaA, keyB2: Joi.number() })
const schemaC = Joi.object({
  keyC1: Joi.string(),
  keyC2: schemaB  
})

Joi.validate({ keyC1: 'joi', keyC2: { keyB1: 'rocks!', keyB2: 3 } }, schemaC)

你可以使用object.keys API

var nestedSchema = joi.object().keys({
    b: joi.number()
});

var base = joi.object({
    a: joi.string(),
    nestedData: nestedSchema
});

只是基於 Francesco 接受的答案的提示:

如果您需要“nestedData”->“base”中的“nestedData:nestedSchema.required()”將不起作用,您需要像任何其他參數一樣直接在“nestedSchema”上設置它

    var nestedSchema = joi.object().keys({
        b: joi.number()
    })
    .required();

    var base = joi.object({
        a: joi.string(),
        nestedData: nestedSchema
    });

使用 Joi 17.6.0版,您可以使用以下valid功能

const schema = Joi.object({
   type: Joi.string().valid('android', 'ios').insensitive()
})

如果 type 屬性不是androidios ,這將引發錯誤

const base = joi.object({ a: joi.string(), nestedData: joi.object({b: joi.number()}) });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM