我想使用“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>
提前致谢
答案 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作为验证模式定义。参见: