簡體   English   中英

如何使用基於各種條件的嵌套 Joi 模式

[英]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.

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