Экспресс-проверка - как разорвать цепочку проверки? - PullRequest
0 голосов
/ 30 августа 2018

У меня есть поле даты, которое я хочу убедиться в правильном формате, и если это так, пользователь старше 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(), чтобы, если дата недействительна, пользовательский валидатор не запускался? Я не смог найти ничего в документах

1 Ответ

0 голосов
/ 30 августа 2018

Вы можете использовать моменты строгий режим вместе с String + Format синтаксический анализ с использованием moment.ISO_8601 (или moment.HTML5_FMT.DATE) специальных форматов .

Ваш код может выглядеть следующим образом:

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!');
    }
  }),
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...