如果JOI中的值可能为null,如何检查依赖项?

时间:2017-05-23 08:46:03

标签: javascript node.js joi

我有四个用户输入:reason1date1reason2date2。全部可能为null / undefined。如果date1reason1不为空,则date1reason1现在是强制性的。 date2reason2也是如此。所以原因取决于他们的日期,反之亦然。

到目前为止我的尝试:

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根本不会触发..

你有其他解决方案吗?

0 个答案:

没有答案