Express Validatior-如何打破验证链?

Express Validatior-如何打破验证链?,express,momentjs,express-validator,Express,Momentjs,Express Validator,我有一个日期字段,我想确保它的格式是有效的,如果是的话,就是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) { ret

我有一个日期字段,我想确保它的格式是有效的,如果是的话,就是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()
后,如何断开链,以便在日期无效时,自定义验证器不会运行?我在

中找不到任何内容。您可以使用momentjs,并使用
moment.ISO_8601
(或
moment.HTML5\u FMT.DATE
)进行解析

您的代码可能如下所示:

body('生日','日期格式应为:YYYY-MM-DD')
//.isRFC3339()//不再需要
.自定义(日期=>{
const mDate=时刻(日期,moment.ISO_8601,真);
const over18=力矩().diff(mDate,'年')>=18;
如果(!mDate.isValid()){
退货承诺。拒绝(“日期不是YYYY-MM-DD”);
如果(!超过18){
回报承诺。拒绝(“你必须年满18岁!”);
}
}),

我对express和express validator了解不够,但如果您想防止momentjs的弃用警告,可以使用如下所示(在您的示例中,类似于:
矩().diff(矩(date,moment.ISO_8601),'years')
)。您也可以使用momentjs并使用检查有效日期。但问题是,如果用户输入的是
ThisisNotDate
,而不是日期momentjs将无法解析,并且无论如何都会失败。更好的方法可能是在自定义验证器中检查数据是否有效,如果无效,则返回拒绝承诺。我想我错过了d thisIsNotDate的期望输出是什么,我在想:
const mDate=moment(date,moment.ISO_8601,true);const over18=moment().diff(mDate,'years')>=18;if(!mDate.isValid()| | | over18)返回承诺。拒绝;
(仅使用不带
isRFC3339()
的自定义验证器),但我不确定这就是你要找的。是的,那太完美了。出于某种原因,我不得不在最后添加
return true
,以便它进行验证。否则它返回的
日期格式应该是:…
error。不知道为什么文档没有提到它。我对express validator了解不够,我很高兴你在这里添加
return true
Maintainer.naged使其工作正常,但我发现它可能更突出。PRs欢迎!