路由器模块 Router module

导读

提示

本章仅与基于 HTTP 的应用程序相关。

在 HTTP 应用程序(例如 REST API)中,处理程序的路由路径通过连接为控制器声明的(可选)前缀(在 @Controller 装饰器内)和方法装饰器中指定的任何路径(例如 @Get('users'))来确定。您可以在 本节 中了解有关此内容的更多信息。此外,您可以为应用程序中注册的所有路由定义 全局前缀,或启用 版本控制

此外,在模块级别定义前缀(以及在该模块内注册的所有控制器)时,可能会派上用场,这种情况也存在。 例如,假设一个 REST 应用程序公开了几个不同的端点,这些端点由应用程序的特定部分仪表板使用。 在这种情况下,您可以使用实用程序RouterModule模块,而不是在每个控制器中重复/dashboard前缀,如下所示:

ts
@Module({
  imports: [
    DashboardModule,
    RouterModule.register([
      {
        path: 'dashboard',
        module: DashboardModule,
      },
    ]),
  ],
})
export class AppModule {}
提示

RouterModule 类从 @nestjs/core 包导出。

此外,您可以定义层次结构。这意味着每个模块都可以有 模块。 子模块将继承其父模块的前缀。在下面的示例中,我们将 AdminModule 注册为 DashboardModuleMetricsModule 的父模块。

ts
@Module({
  imports: [
    AdminModule,
    DashboardModule,
    MetricsModule,
    RouterModule.register([
      {
        path: 'admin',
        module: AdminModule,
        children: [
          {
            path: 'dashboard',
            module: DashboardModule,
          },
          {
            path: 'metrics',
            module: MetricsModule,
          },
        ],
      },
    ])
  ],
})
提示

应非常谨慎地使用此功能,因为过度使用会使代码随着时间的推移难以维护。

在上面的例子中,在 DashboardModule 内注册的任何控制器都会有一个额外的 /admin/dashboard 前缀(因为模块从上到下 - 递归 - 父级到子级连接路径)。 同样,在 MetricsModule 内定义的每个控制器都会有一个额外的模块级前缀 /admin/metrics