我已经动态生成了Router。路由文件位于与路由器路径相对应的文件夹结构中。例如,路由v1/users/getUsers,因此getUsers.js在/api/v1/users/文件夹中。
我的中间件在/middlewares/文件夹中,我正在/createExpressApp.js中生成我的express应用程序
因此,目前我的授权中间件就在.use('/api', router)之前的.use(auth)中,这样它就可以很好地工作,在每个路由之前,身份验证都会执行。但是,我只想保护某些路由。我想我可以通过想要保护的路由将中间件导入到每个文件中,但是有些路由位于文件夹中很深,并且我的导入可能是像../../../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 })
)发布于 2020-01-23 04:16:01
任何聪明的或基于配置的东西都会让你遇到同样的问题:你需要描述哪些路由通过了身份验证。
似乎最简单的方法是要求对所需的路由进行身份验证。
您应该查看express middleware documentation,因为您可以将app分解为不同的路由器和router.use。
典型的模式是使用router.all来定义需要身份验证的端点。您可以使用regex/路由模式匹配,如链接文档和以下截图所示:

https://stackoverflow.com/questions/59867517
复制相似问题