Joi 验证 - 与 POST 中的日期进行比较

Posted

技术标签:

【中文标题】Joi 验证 - 与 POST 中的日期进行比较【英文标题】:Joi Validation - Compare to dates from POST 【发布时间】:2016-02-10 11:33:54 【问题描述】:

我目前在 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()
            
        
    

我知道我可以通过这两个日期并在控制器中进行一些验证,以确保开始日期早于结束日期(即开始日期不能是二月,结束日期是一月)。

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

谢谢! T

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

这对于less than 逻辑来说很好很干净,有没有和less than or equal to 一样好的东西?【参考方案2】:

您可以使用Like比较两个日期

 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));

【讨论】:

有没有办法做到greaterOrEqual .min 可以使用Joi.date.iso().min(Joi.ref('startTime'))

以上是关于Joi 验证 - 与 POST 中的日期进行比较的主要内容,如果未能解决你的问题,请参考以下文章

将组合框日期与datadable框进行比较

通过与javascript中的今天日期进行比较来允许今天的日期和未来的日期

为啥JOI比AJV更受欢迎?

Joi 验证器条件模式

将 java epoch 字符串与 php epoch 日期进行比较

比较表格中的日期和表格中的日期