如何检查依赖关系,如果JOI中的值可能为空?
我有四个用户input: reason1
, date1
, reason1
, date2
。 所有可能为空/未定义。 如果date1
或reason1
不为空,则现在必须使用date1
和reason1
。 date2
和reason2
。 所以原因取决于他们的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吗?