Node.js中使用express-validator实现邮箱验证功能不生效问题咨询
问题原因
express-validator的check系列方法只会执行校验逻辑,将校验结果存储到请求对象中,不会自动触发错误返回,你需要主动提取校验结果做判断。
注意:你现有
validation.js里的错误提示Name is requied拼写有误,建议修正为Name is required。
正确实现步骤
1. 路由内直接校验(最简单方案)
直接在你的/register路由处理函数开头加入校验结果判断逻辑,修改后的router.js对应代码如下:
const express = require('express'); const router = express.Router(); const db = require('./dbConnection'); const { signupValidation, loginValidation } = require('./validation'); const { validationResult } = require('express-validator'); router.post('/register', signupValidation, (req, res, next) => { // 提取校验错误 const errors = validationResult(req); // 校验不通过时返回错误信息 if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } // 校验通过后写后续注册逻辑 // ...你的原有注册业务代码 });
2. 封装统一校验中间件(多路由复用推荐)
如果有多个路由都需要做参数校验,可以把校验结果判断逻辑封装成公共中间件,避免重复代码:
首先在validation.js中新增公共中间件逻辑:
// validation.js 新增代码 const { validationResult } = require('express-validator'); exports.validate = (req, res, next) => { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } next(); }
之后路由引用时直接把这个中间件放在校验规则后面即可:
// router.js 修改后的路由写法 const { signupValidation, loginValidation, validate } = require('./validation'); router.post('/register', signupValidation, validate, (req, res, next) => { // 直接写注册业务逻辑即可,走到这里说明校验已经通过 // ... });
校验失败返回示例
{ "errors": [ { "msg": "Password must be 6 or more characters", "param": "password", "location": "body" } ] }
内容的提问来源于stack exchange,提问作者faraz
相关产品推荐
相关产品推荐

