首页 > 解决方案 > 如何将中间件传递给express node.js中的指定路由

问题描述

我有一个中间件(gateMan)来检查用户是否登录,我不希望中间件(gateMan)在所有路由上触发。但是,它会在我的 98% 的路由上被触发,我怎样才能在不调用每条路由的中间件的情况下实现这一点。

中间件

const gateMan = (req,res,next)=>{
    if(req.user)
        next();
    else{
        res.redirect('/auth/login');
        res.end();
    }
};

路线示例

app.use('/',staticRoute);
app.use('/auth',authRoute);
app.use('/user',gateMan,userRoute);
app.use('/mocks',gateMan,mockRoute);
app.use('/sample2',sample2Route);
app.use('/sample3',sample3Route);
app.use('/sample4',sample4Route);

我想将gateMan应用于除staticRouteauthRoute之外的所有路由。我在想是否有一种方法可以将所有路由传递给数组并将中间件应用于它们,这怎么可能?

标签: javascriptnode.jsexpressmiddleware

解决方案


app.use您可以在您的应用文件中使用 express 。由于app.use依赖顺序,您可以先定义 staticRoute 和 authRoute,然后定义中间件,然后再定义其他路由。

app.use('/',staticRoute);
app.use('/auth',authRoute);
app.use(gateMan)
app.use('/user',userRoute);
app.use('/mocks',mockRoute);
app.use('/sample2',sample2Route);
app.use('/sample3',sample3Route);
app.use('/sample4',sample4Route);

您在gateman中间件之后定义的每条路由都将使用该中间件。


推荐阅读