【发布时间】:2020-05-09 01:45:45
【问题描述】:
我有动态生成的路由器。路由文件位于与路由器路径相对应的文件夹结构中。例如路由v1/users/getUsers 所以getUsers.js 在/api/v1/users/ 文件夹中。
我的中间件在/middlewares/ 文件夹中,我正在/createExpressApp.js 中生成我的快递应用
所以目前我在.use(auth) 中拥有我的授权中间件,就在.use('/api', router) 之前
这样它工作得很好,在每条路线之前,执行身份验证。但是,我只想保护某些路线。我想我可以在每个文件中导入我想要保护的路由的中间件,但是有些路由在文件夹深处,我的导入会像../../../middlware/auth.js
有什么聪明的方法可以避免这种导入吗?
这是我的路由器动态创建,我承认我在互联网上的某个地方找到了该解决方案,我确实理解这个想法,但不知道在哪里为路由器添加一些额外的东西,例如 router.all 或 router.use
import { sync } from 'glob'
import { Router } from 'express'
const auth = require('../middlewares/auth.js').isAuthenticated
export default () => sync('**/*.js', { cwd: `${__dirname}/` })
.map(filename => require(`./${filename}`).default)
.filter(router => Object.getPrototypeOf(router) == Router)
.reduce(
(rootRouter, router) =>rootRouter.use(router),
Router({ mergeParams: true })
)
所以使用 router.all (或文档中的其他人)从下面回答我自己的问题 + 回答。我会把它放在这里:
export default () => sync('**/*.js', { cwd: `${__dirname}/` })
.map(filename => require(`./${filename}`).default)
.filter(router => Object.getPrototypeOf(router) == Router)
.reduce(
(rootRouter, router) =>rootRouter
.all('*getUsers',auth)
.use(router)
,
Router({ mergeParams: true })
)
【问题讨论】:
标签: node.js express middleware