代码之家  ›  专栏  ›  技术社区  ›  BugHunterUK

Express Validatior-如何断开验证链?

  •  1
  • BugHunterUK  · 技术社区  · 6 年前

    我有一个日期字段,我想确保是一个有效的格式,如果是这样的用户超过18岁。格式为 YYYY-MM-DD .

    下面是我的一个验证器-失败的验证器:

    body('birthday', 'Date format should be: YYYY-MM-DD')
      .isRFC3339()
      .custom(date => { 
        const over18 = moment().diff(date, 'years') >= 18;
        if(!over18) {
          return Promise.reject('You must be 18 or over!');
        }
      }),
    

    当前发生的情况是,如果日期不是RFC3339日期,验证链将继续。这是有问题的,因为 moment 如果传递的日期格式不正确,则生成错误。

    打电话给你后,我该如何打破锁链 .isRFC3339() 因此,如果日期无效,自定义验证器将不会运行?我在房间里什么也找不到 docs

    1 回复  |  直到 6 年前
        1
  •  1
  •   VincenzoC    6 年前

    你可以用momentjs strict mode 一起 String + Format 使用解析 moment.ISO_8601 (或 moment.HTML5_FMT.DATE ) special formats

    您的代码可以如下所示:

    body('birthday', 'Date format should be: YYYY-MM-DD')
      // .isRFC3339() // no more needed
      .custom(date => {
        const mDate = moment(date, moment.ISO_8601, true);
        const over18 = moment().diff(mDate, 'years') >= 18;
        if(!mDate.isValid()) {
          return Promise.reject('Date is not YYYY-MM-DD');
        if(!over18) {
          return Promise.reject('You must be 18 or over!');
        }
      }),