Node.js ExpressJS中任何请求之前调用的中间件

Node.js ExpressJS中任何请求之前调用的中间件,node.js,express,middleware,Node.js,Express,Middleware,我正在开发一个nodejsapi,并且在中间件方面遇到了一些问题。 用户可以根据其角色访问路由,角色可以是管理员或超级管理员。 我的权限中间件如下所示: permission.js // middleware for doing role-based permissions const { getRoleName } = require('../../constants/roles'); module.exports = function permit(...allowed) { co

我正在开发一个nodejsapi,并且在中间件方面遇到了一些问题。 用户可以根据其角色访问路由,角色可以是管理员或超级管理员。 我的权限中间件如下所示:

permission.js

// middleware for doing role-based permissions
const { getRoleName } = require('../../constants/roles');
module.exports = function permit(...allowed) {
    const isAllowed = role => allowed.indexOf(role) > -1;
    console.log(isAllowed)
    // return a middleware
    return (req, res, next) => {
        //findRole Name

        if (req.user && isAllowed(getRoleName[req.user.role]))
            next(); // role is allowed, so continue on the next middleware
        else {
            res.error({ code: 403, message: 'Forbidden', errors: ['Permission Denied'] }); // user is forbidden
        }
    }
}
我还有一个身份验证中间件,它将登录用户连接到
req.user
。 我使用这种基于权限的中间件来实现我的路由

records.js
const permit = require("../middlewares/permissions/permission"); 
router.get("/", permit("superAdmin"), getAllRecords);
router.get("/route1", permit("admin"), getRouteOneRecords);
router.get("/route2", permit("admin","superAdmin"), getRouteTwoRecords);
现在的问题是,当我的应用程序运行时,所有角色都在打印,而没有提出任何请求, console.log(被允许),permission.js中的这一行正在打印角色,而不需要向任何路由发出任何请求


我想知道为什么会发生这种情况,甚至在向路由发出请求之前。

只是因为在每个路由中,您都在执行permit()方法,在其中,您在返回中间件函数之前正在执行此块:

const isAllowed = role => allowed.indexOf(role) > -1;
    console.log(isAllowed)
    // return a middleware

但是要确保这个函数的内容
return(req,res,next)=>{
将在执行路由时作为中间件的目的来执行。

但是只有在我将请求传递到该路由后才会触发它。对吗?是的,只有中间件中的回调函数