You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在中间件中使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 21:46:05