本章仅与基于 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
注册为 DashboardModule
和 MetricsModule
的父模块。
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
。