【问题标题】:Why and when should I use express.Router()?为什么以及何时应该使用 express.Router()?
【发布时间】:2018-02-12 07:56:57
【问题描述】:

问题 1: 为什么要使用 express.Router()?

documentation 表示路由器适用于:

  • 将路线组织成单独的文件,从而促进模块化
  • 构建特定于路由器的中间件
  • 本质上是创建一个迷你快递应用

但是,似乎找不到任何其他理由将这些路由移动到更小的路由器单元中。想知道是否有性能原因或其他我不在这里考虑的原因。

问题 2: 什么时候应该使用 express.Router() ?

例如,我有大约 10 条用于 express 应用的路由,这些路由当然可以归类到不同的路由(小部件、用户等)。

在这个应用程序中使用 express.Router() 有意义吗?试图衡量 express.Router 是否用于更大的项目,其中有几十个(和几十个)路由。有 10 条路由,它仍然感觉有点易于管理,而无需分成单独的路由器。

【问题讨论】:

  • 对于这 10 条路线,每条路线都有不同的数据库对象吗?是整个应用程序的 10 个 URL 还是具有多个子目录的 10 个基本 URL?
  • 有 4 个不同的数据库对象,这就是为什么我想知道路由器是否适合将它们分成单独的路由器。

标签: node.js express


【解决方案1】:

我会使用它。你的劳动力成本是最小的,从你自己的角度来看它更干净。 10 条路线足以证明关注点分离是合理的。即使我只有一条路线,我也会这样做,因此当我查看 app.js 或主应用程序文件时,我只会查看影响整个系统的代码。

代码大小相关性

应用程序的大小无关紧要。它关于不将不相关的代码打包在一起。根据您所阐述的内容,您有如下列表所示的 URL,所有这些 URL 都是从同一个文件路由的。

  • /帐户
  • /用户
  • /发票
  • /销售
  • /产品
  • /鞋
  • /怪物
  • /魔法

只有 8 个,现在如果您决定添加子目录怎么办?将所有内容打包到一个文件中将使您更有可能偷工减料或避免重构并查看上述对象的不相关性,它们真的都属于同一个文件吗?

Main.js

app.use('/accounts',accountsRoute)
app.use('/users',userRoute)
app.use('/invoices',invoicesRoute)
app.use('/dancers',dancersRoute)
app.use('/monsters',monstersRoute)
app.use('/magic',magicRoute)

【讨论】:

  • 谢谢@Usman - 非常有帮助,我完全理解你的意思。
【解决方案2】:

主要是关于代码组织/可维护性和范围中间件。

如果您只有 10 条路由,那么没有它也没关系,尤其是当它们都需要相同的中间件时。在那个尺寸下,这是个人喜好,没有性能优势等。

一旦您开始拥有 3-4 个或更多资源(模型)并且需要为每个资源(模型)创建、读取、更新和删除的路线,或者如果一些经过身份验证而另一些未经过身份验证,等等,您就会开始更加欣赏这个组织。

【讨论】:

    猜你喜欢
    • 2010-12-07
    • 2014-05-22
    • 2023-03-08
    • 2013-01-29
    • 1970-01-01
    • 2021-01-11
    • 2011-06-07
    • 1970-01-01
    相关资源
    最近更新 更多