在中间件中使用Express Validator未返回错误结果的问题咨询
解决Express Validator自定义中间件验证无结果的问题
你的问题核心是验证规则没有实际执行,导致validationResult拿不到错误信息。以下是具体修复方案:
问题原因
body('name').notEmpty()只是创建了验证规则链,但并未触发验证逻辑。express-validator的验证方法是异步的,需要手动执行并等待完成,才能将验证结果存入请求对象供validationResult读取。
修复后的代码
1. 自定义验证中间件
const { body, validationResult } = require('express-validator'); module.exports = async (req, res, next) => { if (req.method === 'POST') { console.log('hello'); // 手动执行验证规则,必须用await等待异步操作完成 await body('name').notEmpty().withMessage('名称不能为空').run(req); const result = validationResult(req); console.log(result); // 若有验证错误,直接返回响应,终止后续流程 if (!result.isEmpty()) { return res.status(400).json({ errors: result.array() }); } } next(); };
2. 路由配置(确保中间件被挂载)
如果你的中间件不是全局挂载,需要在对应路由中添加:
const postValidationMiddleware = require('./path/to/your/middleware'); Router.post('/add-post', postValidationMiddleware, addPost);
3. 前置检查:确保body解析中间件已配置
express默认不会解析请求体,必须先挂载body解析中间件,否则req.body为空,验证规则也无法生效:
const express = require('express'); const app = express(); // 解析JSON请求体 app.use(express.json()); // 解析URL编码请求体 app.use(express.urlencoded({ extended: true }));
关键说明
- 必须使用
await等待run(req)执行完成:验证操作是异步的,不等待会导致validationResult在验证未完成时就被调用,自然拿不到错误。 run(req)方法会将验证结果写入当前请求对象,这是validationResult能读取到结果的前提。
内容的提问来源于stack exchange,提问作者user17934831
相关产品推荐
相关产品推荐

