gpt4 book ai didi

node.js + Express ,单独文件中的路由器和仅在某些路由之前的中间件?

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:29 26 4
gpt4 key购买 nike

我有动态生成的路由器。路由文件位于与路由器路径相对应的文件夹结构中。例如路由 v1/users/getUsers 因此 getUsers.js 位于 /api/v1/users/ 文件夹中。

我的中间件位于 /middlewares/ 文件夹中,我正在 /createExpressApp.js 中生成我的 Express 应用程序

所以目前我的授权中间件位于 .use(auth) 之前 .use('/api', router)这样它就可以正常工作,在每个路由之前,都会执行 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 })
)

最佳答案

任何聪明的或基于配置的东西都会让你遇到同样的问题:你需要在某个地方描述哪些路由对其进行了身份验证。

似乎最简单的方法是要求对所需的路由进行身份验证。

您应该查看 express middleware documentation ,因为您可以将应用程序分解为不同的路由器和router.use

典型的模式是使用router.all来定义需要身份验证的端点。您可以使用正则表达式/路由模式匹配,如链接文档和下面的屏幕截图所示:

on router

关于node.js + Express ,单独文件中的路由器和仅在某些路由之前的中间件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59867517/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com