我有四个用户输入:reason1
,date1
,reason2
,date2
。全部可能为null / undefined。如果date1
或reason1
不为空,则date1
和reason1
现在是强制性的。 date2
和reason2
也是如此。所以原因取决于他们的日期,反之亦然。
到目前为止我的尝试:
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)
而无法工作,因为它始终是真的。请注意,如果原因也是null
,则日期可能为null
。
所以我决定" hack"通过数组的解决方案:数组的长度可以是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
根本不会触发..
你有其他解决方案吗?