【问题标题】:Joi Validation - Compare to dates from POSTJoi 验证 - 与 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

【问题讨论】:

    标签: node.js validation hapijs joi


    【解决方案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'))
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    相关资源
    最近更新 更多