我动态生成了路由器。路由文件采用与路由器路径相对应的文件夹结构。例如路由v1/users/getUsers
,因此getUsers.js位于/api/v1/users/
文件夹中。
我的中间件位于/middlewares/
文件夹中,而我正在/createExpressApp.js
中生成快递应用程序
所以目前我在.use(auth)
之前的.use('/api', router)
中拥有我的授权中间件
这样,在执行每个路由auth之前,它就可以正常工作。但是,我只想保护某些路线。我想我可以使用要保护的路由将中间件导入每个文件中,但是其中一些路由位于文件夹深处,并且导入的过程很像../../../middlware/auth.js
有什么聪明的方法可以避免这种导入吗?
这是我的路由器动态创建,我承认我在Internet上的某个地方找到了该解决方案,并且我理解了想法,但是不知道在哪里放置一些额外的路由器,例如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 })
)
答案 0 :(得分:2)
任何聪明或基于配置的问题都会使您面临相同的问题:您需要在某个地方描述哪些路由对其进行了身份验证。
似乎最简单的方法是要求对所需的路由进行身份验证。
您应该查看express middleware documentation,因为您可以将应用分为不同的路由器和router.use
。
典型的模式是使用router.all
来定义需要认证的端点。您可以使用正则表达式/路由模式匹配,如链接文档和以下屏幕截图所示: