Express表单验证路由器

时间:2016-05-19 20:41:45

标签: javascript regex node.js forms express

我在router.post中有这个代码,它将在ajax的帮助下验证我的输入表单:

if(req.body.firstname === '' || req.body.firstname !== req.body.firstname.match(/\D+/g)[0]) {
  console.log('AJAX ERROR: Firstname is empty and/or have a number.');
}
else if(req.body.captcha !== req.body.captcha.match(/^kettő$/igm) ||
        req.body.captcha !== req.body.captcha.match(/^ketto$/igm) ||
        req.body.captcha !== req.body.captcha.match(/^two$/igm)) {
  console.log('AJAX ERROR: captcha is empty and/or the entered value is invalid.');
}
else {
  console.log('AJAX ERROR');
};

预期产出:

  • 如果firstname为空,则在console.log
  • 中抛出错误
  • 如果firstname有数字,则在console.log
  • 中抛出错误
  • 如果captcha不等于kettő, ketto, Kettő, Ketto, KETTŐ, KETTO, two, Two, TWO个答案,则在console.log
  • 中抛出错误
  • 如果不满足这些要求,请抛出else

经验丰富的行为:

  • captcha在验证console.log后始终向firstname投掷错误。 firstname按预期工作。

在连续多次重新请求并出现以下控制台错误后,我也遇到了严重的延迟:main-vanilla.min.js:1 POST http://127.0.0.1:3000/hu/form net::ERR_EMPTY_RESPONSE

1 个答案:

答案 0 :(得分:1)

else if(req.body.captcha !== req.body.captcha.match(/^kettő$/igm) ||
        req.body.captcha !== req.body.captcha.match(/^ketto$/igm) ||
        req.body.captcha !== req.body.captcha.match(/^two$/igm)) {
  console.log('AJAX ERROR: captcha is empty and/or the entered value is invalid.');
}

有一些问题:

  1. 您在[0] .match()之后的firstname.match()之后错过了match()&&返回一个数组,因此您需要选择第一个元素。

  2. 现在逻辑说如果其中一个不匹配,那么抛出一个错误。你真正想要的是,如果这些都不匹配,就会抛出一个错误。您应该使用||代替function BusinessAddAppointmentCtrl($scope, ionicDatePicker, ionicTimePicker, DatePickerService, TimePickerService) { // Booking time and date $scope.booking = { 'date': DatePickerService.getDate(), 'time': TimePickerService.getTime() } // Ionic datepicker $scope.openDatePicker = function(val) { ionicDatePicker.openDatePicker(DatePickerService.datePickerObject); }; // Ionic timepicker $scope.openTimePicker = function () { ionicTimePicker.openTimePicker(TimePickerService.timePickerObject); }; } 来实现这一目标。