javascript - 如何将中间件传递给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应用于除staticRoute和authRoute之外的所有路由。我在想是否有一种方法可以将所有路由传递给数组并将中间件应用于它们,这怎么可能?
解决方案
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
中间件之后定义的每条路由都将使用该中间件。
推荐阅读
- r - 无法从闪亮的降价报告中的数据库查询中检索数据
- html - 如何正确居中和调整图像大小?
- flutter - 使用预先生成的文件 ID 将文件上传到谷歌驱动器时出现详细 ApiRequestError
- c# - 不要在 Swashbuckle (Swagger) 中显示端点
- ag-grid - ServerSideRowModel - 一次删除过滤器和排序,而不会导致调用 `dataSource.getRows` 两次
- java - Android Studio 中的错误和模拟器问题
- firebase - 在颤动的文本字段中显示值
- java - 将gridview与其他项目一起使用时滚动整个屏幕
- python - 来自 HTML 颜色的 seaborn 发散 cmap 调色板
- javascript - 如何对数组中的相同元素进行分组