【发布时间】:2020-11-02 17:39:50
【问题描述】:
我已经研究这个特定问题大约一周了,但似乎找不到任何关于最新版本 JOI (17.3.0) 的可靠文档。
我试图实现的逻辑如下:
如果填充了 A,则需要 B OR 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 语句等条件切换的嵌套架构。我已经看到其他人连接“何时”函数来构建自定义 OR(甚至 AND)条件,但不确定是否有更简洁的方法可以使用 Joi 17.3.0
主要问题是我需要根据条件来指导架构,而不是仅仅将信息扔到正文中,希望它能够正常工作。我没有收到任何语法错误,但是在发送请求时我没有收到我需要的正确响应/错误。
理想情况下,我希望它可以检查何时给出 A、B 或 C,或者是否给出 F AND K AND A,然后根据给出的内容,它可以使用正确的架构。
除此之外,我的所有引用都有一个 ".allow("")",因此当没有为不需要的引用分配任何内容时,架构不会引发错误。在了解 any.optional() 函数之前,我已经这样做了。不确定这是否是一个问题,但只是以防万一。
任何建议都会有所帮助。
【问题讨论】:
标签: javascript node.js express validation joi