[英]How to use nested Joi schemas based on various conditionals
我已經研究這個特定問題大約一個星期了,但似乎找不到任何關於最新版本 JOI (17.3.0) 的可靠文檔。
我試圖實現的邏輯如下:
如果填充了 A,則需要 B 或 C。
如果填充了 F,則需要 A AND K。 (如果 A 為空,則需要 F)
我一直在查看 Joi 文檔並嘗試了所提供功能的各種組合。 這是我正在運行的當前代碼,根據所描述的邏輯,它沒有給我想要的東西。
const B = Joi.alternatives().conditional(Joi.ref('#B'), {is: Joi.boolean().valid(false), then : C.required(), otherwise: Joi.date().iso()}).allow("")
const check = Joi.object().keys({
//Name search
A: A,
B: B.when('A', {is: A.required(), then: B.required()}),
C: C,
F: F.when('A', {is: '', then: F.required()}),
K: K.when('F', {is: F.required(), then: K.required()}),
A: A.when('F', {is: F.required(), then: A.required()}),
}).unknown(true);
我知道這主要是基於架構的松散構造,所以我想看看是否有辦法讓我創建可以基於 AND 和 OR 語句等條件切換的嵌套架構。 我見過其他人連接“when”函數來構建自定義 OR(甚至 AND)條件,但不確定是否有使用 Joi 17.3.0 的更簡潔的方法來做到這一點
主要問題是我需要根據條件來指導模式,而不是僅僅將信息扔到正文中,希望它可以正常工作。 我沒有收到任何語法錯誤,但是在發送請求時,我沒有得到我需要的正確響應/錯誤。
理想情況下,我希望擁有它,以便它可以檢查何時給出 A、B 或 C,或者是否給出了 F 和 K 和 A,然后根據給出的內容,它可以使用正確的模式。
除此之外,我所有的引用都有一個“.allow("")”,這樣當沒有分配給不需要的引用時,模式不會拋出錯誤。 我在了解 any.optional() 函數之前就這樣做了。 不確定這是否可能是一個問題,但只是額外的信息以防萬一。
任何的意見都將會有幫助。
我正在使用@hapi/joi 。
joi.alternatives(
joi.object({
A: joi.string().required(),
B: joi.string().required(),
C: joi.string().allow(''),
}),
joi.object({
A: joi.string().required(),
B: joi.string().allow(''),
C: joi.string().required(),
}),
joi.object({
F: joi.string().required(),
A: joi.string().required(),
K: joi.string().required(),
})
)
隨意添加更多選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.