NodeJS Express 中如何对请求的手机号、邮箱参数实现校验?
Express 规范参数校验实现方案
以下两种是业内常用的实现方式,可根据项目复杂度选择:
1. 手写轻量校验中间件(适合简单规则的小型项目)
你给出的判断逻辑本质是校验phone、email两个字段必填,不能为undefined或其他假值,把这段逻辑抽成可复用的中间件即可,不用在每个路由里重复写判断:
// 首先确保已经配置请求体解析中间件,通常在项目入口处全局配置即可 app.use(express.json()) // 适配JSON格式请求体 // app.use(express.urlencoded({ extended: true })) // 适配表单格式请求体 // 抽离公共必填参数校验中间件 const validateRequiredFields = (fields) => { return (req, res, next) => { const invalidFields = [] fields.forEach(field => { if (req.body[field] === undefined || !req.body[field]) { invalidFields.push(field) } }) if (invalidFields.length) { return res.status(400).json({ code: 400, msg: `参数不合法,缺少或无效字段:${invalidFields.join('、')}`, data: null }) } next() } } // 路由中直接使用,传入需要校验的字段数组即可 app.post('/your/api/route', validateRequiredFields(['phone', 'email']), (req, res) => { // 走到这里的req.body.phone和req.body.email已经通过校验,直接使用即可 res.json({ code: 200, msg: '请求成功' }) } )
该方案无额外依赖,逻辑完全可控,适合规则简单的小型项目。
2. 专用校验库实现(适合有复杂校验需求的中大型项目)
如果后续需要扩展格式校验(比如手机号格式、邮箱格式校验),推荐使用专门针对Express生态的express-validator库,内置大量通用校验规则,无需自己重复实现:
- 首先安装依赖:
npm install express-validator - 代码实现:
const { body, validationResult } = require('express-validator') app.post('/your/api/route', express.json(), // 定义校验规则,可灵活扩展 body('phone').notEmpty().withMessage('手机号不能为空'), body('email').notEmpty().withMessage('邮箱不能为空'), // 可直接追加格式校验规则,比如验证邮箱格式:body('email').isEmail().withMessage('邮箱格式不符合要求') (req, res) => { // 统一获取校验错误 const errors = validationResult(req) if (!errors.isEmpty()) { return res.status(400).json({ code: 400, msg: '参数校验失败', errors: errors.array() }) } // 后续业务逻辑 res.json({ code: 200, msg: '请求成功' }) } )
该方案扩展性极强,内置了格式、长度、数值范围等几十种通用校验规则,后续新增校验规则成本极低。
注意:两种方案都需要先配置对应的请求体解析中间件,否则无法正常读取
req.body的内容。
内容的提问来源于stack exchange,提问作者Muhammad Ammar
相关产品推荐
相关产品推荐

