我正在尝试使用express-validator 来验证req.body,然后再发送post 请求以将数据插入postgres。
我有一个路由文件、控制器文件,我想在名为 validate.js 的文件中进行验证。同时,我已经安装了express-validator,并在我的server.js 中导入了它。我遇到的其他资源似乎在包含插入数据逻辑的函数中实现了验证。
//server.js
....
import expressValidator from 'express-validator';
...
app.use(bodyParser.urlencoded({ extended: false }));
app.use(expressValidator);
//route.js
import express from 'express';
import usersController from './controller';
const router = express.Router();
router.post('/createuser', usersController.createUser);
//controller.js
createUser(req, res){
// ...
const { firstName, lastName, email, password } = req.body;
//code to insert user details to the database
}
//validator.js
import { check } from 'express-validator/check';
module.exports = [check('email').isEmail()];
我希望在名为 validator.js 的文件中实现验证,例如在插入数据库之前验证电子邮件
我有同样的方法,除了一件事是我们不应该在控制器中处理验证错误。因此,如果验证层发生任何错误,它应该只从那里返回。我们不应该允许我们的控制流进入控制器层。下面是代码示例:
使用路由.js
const route = express.Router();
const {
**validateUser**,
} = require('../middlewares/validators/userValidator');
route.route('/').post(**validateUser**, createUser);
route.route('/:id').put(**validateUser**, updateUser);
module.exports = route;
用户验证器.js
const {check, validationResult} = require('express-validator');
exports.validateUser = [
check('name')
.trim()
.escape()
.not()
.isEmpty()
.withMessage('User name can not be empty!')
.bail()
.isLength({min: 3})
.withMessage('Minimum 3 characters required!')
.bail(),
check('email')
.trim()
.normalizeEmail()
.not()
.isEmpty()
.withMessage('Invalid email address!')
.bail(),
(req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty())
return res.status(422).json({errors: errors.array()});
next();
},
];
控制器.js
/**
* @desc - create new User
* @method - POST
*/
exports.createCategory = async (req, res) => {
// do your stuff here. (No need to check any validation error here)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)