首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node.js + express,路由器在分离的文件和中间件中只在某些路由之前?

node.js + express,路由器在分离的文件和中间件中只在某些路由之前?
EN

Stack Overflow用户
提问于 2020-01-23 04:09:03
回答 1查看 64关注 0票数 2

我已经动态生成了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

代码语言:javascript
复制
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 (或文档中的其他人)回答我的问题。我会把它放在这里:

代码语言:javascript
复制
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 })
    )
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-23 04:16:01

任何聪明的或基于配置的东西都会让你遇到同样的问题:你需要描述哪些路由通过了身份验证。

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59867517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档