如何检查依赖关系,如果JOI中的值可能为空?

我有四个用户input: reason1date1reason1date2 。 所有可能为空/未定义。 如果date1reason1不为空,则现在必须使用date1reason1date2reason2 。 所以原因取决于他们的date,反之亦然。

我到目前为止的尝试:

 var validationSchema = Joi.object.keys({ date1: Joi.date().allow('').allow(null); date2: Joi.date().allow('').allow(null); }) .with('reason1', 'date1') .with('reason2', 'date2') ; 

不会工作,因为它永远是真的,由于.allow(null) 。 请记住,date可能为null ,如果原因也为null

所以我决定通过数组“破解”解决scheme:数组的长度可以是0(两个都是空),2(都包含数据)或1(只有一个包含数据)

 var data = req.body; data.checkReason1 = []; data.checkReason2 = []; (data.reason1 ? data.checkReason1.push(data.reason1) : null); (data.date1 ? data.checkReason1.push(data.date1) : null); (data.reason2 ? data.checkReason2.push(data.reason2) : null); (data.date2 ? data.checkReason2.push(data.date2) : null); var validationSchema = { checkReason1: Joi.array().length(0).length(2); checkReason2: Joi.array().length(0).length(2); } 

也不会工作,因为数组上的多个.length()将不会与Joi一起工作。

//编辑第三次尝试是通过when

 var validationSchema = { date1: Joi.date().allow('').allow(null) .when('reason1', {is: Joi.string().min(1), then: Joi.date().required()}), date2: Joi.date().allow('').allow(null) .when('reason2', {is: Joi.string().min(1), then: Joi.date().required()}) }; 

但我when不会触发

你有另一个解决scheme吗?