我正在使用 express-validator
进行服务器验证,我在日期验证方面遇到了一些问题。我正在尝试验证我的开始日期是否在我的结束日期之前。我目前正在使用这个:
check('taskStartDate', { isBefore : ('taskEndDate' === undefined ) })
.isBefore('taskEndDate').withMessage('Start Date must be before End Date')
但是,问题是无论我在表单中输入什么日期,开始日期是在结束日期之前还是之后,我都会收到已实现的消息“开始日期必须在结束日期之前”。除了自定义验证器之外,我不知道还有什么办法可以做到这一点,如果这是推荐的方法,我将不胜感激有关如何编写自定义验证的任何指导。我还尝试像这样包括 sanitizer :
check('taskStartDate').isBefore(sanitizeBody('taskEndDate').toDate())
.withMessage( 'Start Date must be before End Date.')
但这也不起作用。任何帮助将不胜感激!
最佳答案
正如@gustavohenke 所写,您应该创建自定义验证器。以下代码适用于 express-validator版本 13.7.0 .与@gustavohenke 示例的主要区别是将验证函数更改为 check()
并且在当前版本中,此函数必须在最后返回 true
。
[
check('end').toDate(),
check('start').toDate().custom((startDate, { req }) => {
if (startDate.getTime() > req.body.end.getTime()) {
throw new Error('start date must be before end date');
}
return true
})
];
关于validation - 快速验证器 : How to validate "start date" is before "end date",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51480936/