Экспресс-валидатор isAfter всегда false
Я пытаюсь проверить, что определенная endDate находится после startDate. Я перепробовал все, что нашел и мог придумать, но ничего не работает. Несколько примеров того, что я пробовал:
check('endDate').isAfter(new Date('startDate')).withMessage('End date of lab must be valid and after start date')
check('endDate').isAfter(new Date('startDate').toDateString()).withMessage('End date of lab must be valid and after start date')
check('endDate').isAfter('startDate').withMessage('End date of lab must be valid and after start date')
check('endDate').isAfter(new Date('' + 'startDate').toDateString()).withMessage('End date of lab must be valid and after start date')
Документы говорят, что isAfter() ожидает строку.
2 ответа
Вот простой пример:
определять startDate
, например
var startDate = new Date(2019, 11, 22); // or var startDate = new Date();
Затем вы можете проверить даты, которые вы хотите
check('endDate').isAfter(new Date(startDate).toDateString()).withMessage('End date of lab must be valid and after start date')
Если startDate
это тоже поле ввода, вы можете использовать пользовательский валидатор:
check('endDate').custom((value, { req }) => {
if(new Date(value) <= new Date(req.body.startDate)) {
throw new Error ('End date of lab must be valid and after start date');
}
return true;
})
query("endDate").notEmpty().custom((v, { req }) => v > req.query?.startDate)