Express Validatior-如何打破验证链?
我有一个日期字段,我想确保它的格式是有效的,如果是的话,就是18岁以上的用户。格式为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
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欢迎!