Joi验证 - 比较来自POST的日期

20

我目前在HapiJS/NodeJS中使用Joi来验证数据。特别是其中一个POST请求包含两个ISO日期(开始日期和结束日期)。这些日期将被传递到路由并进行验证,以确保它们是ISO日期。

{
    method: 'POST',
    path: '/api/calendar',
    handler: calendar.getInfo,
    config: {
        validate: {
            payload: {
                start: Joi.date().iso(),
                end: Joi.date().iso()
            }
        }
    }
}

我知道我可以通过控制器传递这两个日期并进行一些验证,以确保开始日期在结束日期之前(即,开始日期不能为2月,结束日期为1月)。

我的问题是,是否有一种方法让Joi来确定这一点,并报错?如果需要更多信息,请告诉我。

谢谢!

2个回答

48

您可以使用Joi.ref()引用其他值:

end: Joi.date().iso().min(Joi.ref('start'))

4
这对于“小于”逻辑来说很好理解,那么有没有类似简洁易懂的方法来表达“小于或等于”的逻辑呢? - Adrian Lynch

7

您可以使用以下方法比较两个日期

 const Joi = require('joi');

const messagesUpdateObj = {
    startTime: Joi.date().iso().required(),
    endTime : Joi.date().iso().greater(Joi.ref('startTime')).required()
  };
let schema =  Joi.object().keys(messagesUpdateObj);
console.log(Joi.validate({startTime : '2018-08-28T11:46:30.120',endTime : '2018-08-29T11:46:30.120'}, schema));

4
有没有一种方法可以执行“greaterOrEqual”操作? - EuberDeveloper
可以使用.min方法:Joi.date.iso().min(Joi.ref('startTime')) - Madhava Reddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接