首页 > 解决方案 > 如何有条件地调用路由器级中间件?

问题描述

我有两个函数来验证请求正文,validation1validation2. 现在我的任务是,在解析传入的请求正文后,我需要使用validation1if 用户角色premium user验证数据,否则我将使用 验证数据validation2

我试图像下面这样解决它,但无济于事。由于某种原因,验证中间件没有被调用。

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

router.route('/check').post(
  (req, res, next) => {
    if (req.role === 'premium user') {
      validation1(someInformation);
    } else {
      validation2(someInformation);
    }
    next();
  },
  userController.check
);


const validation1 = (someInformation) => (req, res, next) => {
  // codes
  return next();
}

const validation2 = (someInformation) => (req, res, next) => {
  // codes
  return next();
}

任何帮助,将不胜感激。提前致谢。

标签: node.jsexpressexpress-router

解决方案


您应该将回调函数传递next给验证函数。

还要更改您的验证功能,如下面的代码:

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

router.route('/check').post(
  (req, res, next) => {
    if (req.role === 'premium user') {
      validation1(req, res, next);
    } else {
      validation2(req, res, next);
    }
  },
  userController.check
);


const validation1 = (req, res, next) => {
  // codes
  return next();
}

const validation2 = (req, res, next) => {
  // codes
  return next();
}

推荐阅读