如何使用express-validator来验证快速表达式中的表单数据

时间:2017-04-19 08:53:57

标签: node.js validation parsing express formidable

我想使用“express-formidable”来解析表单数据和“express-validator”来验证表单数据,但它不起作用。

我的表单控制器代码

var express = require('express');
var formidable = require('express-formidable');
var expressValidator = require('express-validator');

var router = express.Router();
router.use(formidable());
router.use(expressValidator());


router.all('/form-validator', function (req, res, next) {
   if (req.method.toLowerCase() == "post") {

      req.check('name', 'Invalid Name').isEmpty();
      req.check('email', 'Invalid Email').isEmail();
      var errors = req.validationErrors();
      if (errors) {
        res.send("validation failed");
      } else {
        res.send(JSON.stringify(req.fields));
      }
  } else {
    res.render('pages/test');
  }
});


module.exports = router;

,我的表格是

 <form action="/form-validator" method="post" 
  enctype="multipart/form-data">

       <div class="form-group">
          <label for="name">Name</label>
          <input type="text" name="name" class="form-control" id="" 
           placeholder="Name">
      </div>
      <div class="form-group">
         <label for="exampleInputEmail1">Email address</label>
         <input type="email" name="email" class="form-control" 
         id="exampleInputEmail1" placeholder="Email">
      </div>
       <button type="submit" class="btn btn-default">Sign up</button>
  </form>

提前致谢

1 个答案:

答案 0 :(得分:0)

而不是使用.all处理程序并明确地测试HTTP方法:

router.all('/form-validator', function (req, res, next) {
   if (req.method.toLowerCase() == "post") {
       //...

您可以直接使用.post处理程序:

router.post('/form-validator', function (req, res, next) {
   //...

将实际请求处理的输入验证分开也可以简化逻辑。您可以在测试中间件中使用next()有或没有错误。

您也可以尝试express-validation代替express-validator

因为它使用声明式验证逻辑为您制作中间件,例如:

{
  body: {
    email: Joi.string().email().required(),
    password: Joi.string().regex(/[a-zA-Z0-9]{3,30}/).required()
  }
}

它使用Joi作为验证模式定义。参见: