簡體   English   中英

express-validator:如何驗證“開始日期”在“結束日期”之前

[英]express-validator : How to validate "start date" is before "end date"

我正在使用express-validator進行服務器驗證,但我的日期驗證遇到了一些麻煩。 我正在嘗試驗證我的開始日期是否早於我的結束日期。 我目前正在使用這個:

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

但是,問題在於無論我在表單中輸入什么日期,無論開始日期是在結束日期之前還是之后,我都會收到我實施的消息“開始日期必須在結束日期之前”。 除了自定義驗證器之外,我不知道 go 如何做到這一點,如果這是推薦的方式,我將不勝感激有關如何編寫自定義驗證的 go 的任何指導。 我還嘗試像這樣包括消毒:

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

但這也不起作用。 任何幫助將不勝感激!

這是一個自定義驗證器,用於檢查輸入的出生日期(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= 出生日期輸入字段的名稱

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

默認為現在(當前日期)

是的,當您想根據請求中的另一個值檢查一個值時,使用自定義驗證器是一種可行的方法。

您會對以下消毒劑和驗證器的組合感興趣(消毒劑在驗證器之前運行,因此您可以在使用它們時將值作為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');
    }
  })
]

查看文檔以獲取更多示例。

正如@gustavohenke 所寫,您應該創建自定義驗證器。 下面的代碼適用於express-validator版本13.7.0 @gustavohenke 示例的主要區別是將驗證 function 更改為check() ,在當前版本中,此 function 必須在最后返回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
    })
];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM