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

如何在Express中条件调用路由级中间件,按用户角色执行不同校验

问题原因

  • 你定义的validation1、validation2是高阶函数,调用validation1(someInformation)仅会返回标准Express中间件函数,不会实际执行校验逻辑
  • 原代码中拿到返回的中间件后没有调用,就直接执行next()跳转到了业务控制器,因此校验逻辑始终不会运行
  • 补充:原代码中校验函数定义在路由使用之后,存在变量提升问题,实际运行会报变量未定义错误

修复方案

将路由逻辑调整为动态选择校验中间件后主动执行,同时将校验函数定义前置:

const express = require('express');
const router = express.Router();
   
const { userController } = require('./controllers');

// 校验函数定义前置
const validation1 = (someInformation) => (req, res, next) => {
  // 校验逻辑
  return next();
}

const validation2 = (someInformation) => (req, res, next) => {
  // 校验逻辑
  return next();
}

router.route('/check').post(
  (req, res, next) => {
    // 根据用户角色选择对应的校验中间件
    const validate = req.role === 'premium user' 
      ? validation1(someInformation) 
      : validation2(someInformation);
    // 执行校验中间件,传入上下文和next控制流程
    validate(req, res, next);
  },
  userController.check
);

内容的提问来源于stack exchange,提问作者MI Sabic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:48:04