前言
express-validation是一个中间件,它验证请求的body, params, query, headers 和 cookies ,并且如果任何配置的验证规则失败,返回一个错误的响应
官方文档:https://express-validator.github.io/docs/
示例
1、安装express-validator
npm install express-validator
2、引入
在路由文件中引入
const { body, validationResult } = require('express-validator');
示例代码如下
const express =require("express")
const userCtrl = require("../controller/user") //controller模块
const { body, validationResult } = require('express-validator'); //数据验证
const { User } = require("../model") //引入mongoDB对象
const router = express.Router()
/**
* 用户模块
*/
// 用户登录
router.post('/users/login',userCtrl.login)
// 用户注册
router.post('/users',[ //配置验证规则
body('user.username').notEmpty().withMessage('用户名不能为空!')
.custom(async username => {
const user = await User.findOne({ username })
if(user)
return Promise.reject('用户名已存在')
}),
body('user.password').notEmpty().withMessage('密码不能为空!'),
body('user.email').notEmpty().withMessage('邮箱不能为空!')
.isEmail().withMessage('邮箱格式不正确!')
.bail()
.custom(async email => {
const user = await User.findOne({ email })
if(user)
return Promise.reject('邮箱已经存在')
}),
],(req, res, next) => { //判断验证结果
const errors = validationResult(req)
if(!errors.isEmpty()){
return res.status(400).json({
errors: errors.array()
})
}
next()
},userCtrl.register)
module.exports = router
controller模块
const { User } = require('../model')
// 用户注册
exports.register = async (req, res, next) => {
try {
// 获取数据
console.log(req.body)
// 保存数据
const user = new User(req.body.user)
await user.save()
// 发送响应
res.status(201).json({
user
})
} catch (error) {
next(error)
}
}
3、测试