2

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.')

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

4

3 回答 3

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

默认是现在(当前日期)

于 2021-05-25T12:25:38.260 回答
1

这是一个自定义验证器,用于检查输入的出生日期(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= 出生日期输入字段的名称

于 2020-05-12T10:31:05.113 回答
0

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

您会对以下消毒剂和验证器的组合感兴趣(消毒剂在验证器之前运行,因此您可以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');
    }
  })
]

查看文档以获取更多示例。

于 2018-07-24T01:08:01.730 回答