簡體   English   中英

Joi 嵌套模式和默認值

[英]Joi nested schemas and default values

我試圖讓 Joi 在另一個引用的輔助模式上強制執行默認值。 我有兩個像這樣的模式:

const schemaA = Joi.object().keys({
  title: Joi.string().default(''),
  time: Joi.number().min(1).default(5000)
})

const schemaB = Joi.object().keys({
  enabled: Joi.bool().default(false),
  a: schemaA
})

我想要的是提供一個未定義a的對象,並讓 Joi 為其應用默認值,如下所示:

const input = {enabled: true}

const {value} = schemaB.validate(input)

//Expect value to equal this:
const expected = {
  enabled: true,
  a: {
    title: '',
    time: 5000
  }
}

問題在於,由於密鑰是可選的,因此根本沒有強制執行。 所以我想要的是它是可選的,但如果不存在,則正確填充schemaA默認值。 我一直在查看文檔,但似乎找不到任何關於此的信息,盡管我可能遺漏了一些明顯的內容。 任何提示?

更新:2020 年 4 月。

現在,您可以在嵌套對象中使用default() 這是帶有測試的repo 中提交

var schema = Joi.object({
                a: Joi.number().default(42),
                b: Joi.object({
                    c: Joi.boolean().default(true),
                    d: Joi.string()
                }).default()
            }).default();

這應該這樣做:

const schemaA = Joi.object().keys({
  title: Joi.string().default(''),
  time: Joi.number().min(1).default(5000),
});

const schemaB = Joi.object().keys({
  enabled: Joi.bool().default(false),
  a: schemaA.default(schemaA.validate({}).value),
});

雖然如果他們實現一個功能讓我們為默認值傳入Joi模式對象會更好,就像這樣: schemaA.default(schemaA)schemaA.default('object')

暫無
暫無

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

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