【问题标题】:express-validator : How to validate "start date" is before "end date"express-validator:如何验证“开始日期”在“结束日期”之前
【发布时间】:2018-12-31 00:46:21
【问题描述】:

我正在使用express-validator 进行服务器验证,但在日期验证方面遇到了一些问题。我正在尝试验证我的开始日期是否早于我的结束日期。我目前正在使用这个:

check('taskStartDate', { isBefore : ('taskEndDate' === undefined ) })
.isBefore('taskEndDate').withMessage('Start Date must be before End Date')

但是,问题在于无论我在表单中输入什么日期,无论开始日期是在结束日期之前还是之后,我都会收到我实施的消息“开始日期必须在结束日期之前”。除了自定义验证器之外,我不知道该怎么做,如果这是推荐的方式,我将不胜感激有关如何编写自定义验证的任何指导。我还尝试像这样包括消毒:

check('taskStartDate').isBefore(sanitizeBody('taskEndDate').toDate())
.withMessage( 'Start Date must be before End Date.')

但这也不起作用。任何帮助将不胜感激!

【问题讨论】:

    标签: validation express express-validator validator.js


    【解决方案1】:

    express-validator 使用底层的validator.js,因此所有validator.js 中间件在express-validator 中也可用。

    检查 [validator.js]:https://github.com/validatorjs/validator.js#validators 完整列表

    有 .isAfter() 和 isBefore()。

    你可以这样实现

    check('dateOfMissing', 'Date cannot be in future').Before('dateOfMissing', ['timeinpast']),
    check('dateOfMissing', 'Date cannot be in future').isAfter('dateOfMissing', ['time in future']);

    默认是现在(当前日期)

    【讨论】:

      【解决方案2】:

      这是一个自定义验证器,用于检查输入的出生日期(dob)是否有效,即在今天之前。

      check('dob').custom(value=>{
          let enteredDate=new Date(value);
          let todaysDate=new Date();
          if(enteredDate>todaysDate){
              throw new Error("Invalid Date");
          }
          return true;
      })
      

      dob= 出生日期输入字段的名称

      【讨论】:

        【解决方案3】:

        是的,当您想在请求中检查一个值与另一个值时,可以使用自定义验证器。

        您会对以下 sanitizers 和 validator 的组合感兴趣(sanitizers 在验证器之前运行,因此您在使用它们时可以获得 Date 对象的值):

        [
          sanitize('taskEndDate').toDate(),
          check('taskStartDate').toDate().custom((startDate, { req }) => {
            if (startDate.getTime() >= req.body.taskEndDate.getTime()) {
              throw new Error('start date must be before end date');
            }
          })
        ]
        

        Look at the docs 了解更多示例。

        【讨论】:

        • 感谢您的回复。不幸的是,您的回答对我不起作用。包括消毒是使日期无法正确验证的原因。我不知道为什么。相反,我只是使用了check('taskStartDate').custom((StartDate, { req }) => EndDate >= req.body.taskEndDate ).withMessage(...)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-06
        • 2011-12-05
        • 2020-05-27
        • 1970-01-01
        • 2015-09-29
        • 2015-01-05
        • 2018-01-31
        相关资源
        最近更新 更多