You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为NestJS模块及其子模块统一设置并应用路由前缀?

解决NestJS父模块路由前缀同步到子模块的问题

方法一:使用RouterModule嵌套路由配置

在AppModule的RouterModule.register中通过children字段嵌套子模块,父模块的前缀会自动应用到子模块的所有路由:

import { Module } from "@nestjs/common";
import { ApiModule } from "./api/api.module";
import { AuthModule } from "./api/auth/auth.module";
import { RouterModule } from "@nestjs/core";

@Module({
    imports: [
        ApiModule,
        RouterModule.register([
            {
                path: "api",
                module: ApiModule,
                children: [
                    { path: "auth", module: AuthModule },
                ],
            },
        ]),
    ],
})
export class AppModule {}

配置后,AuthController的路由会自动带上/api/auth前缀,例如原本的/login会变为/api/auth/login。

方法二:在父模块ApiModule内配置路由前缀

如果希望ApiModule下所有子模块默认继承api前缀,可在ApiModule中引入RouterModule并配置子模块路由:

修改api.module.ts:

import { Module } from "@nestjs/common";
import { AuthModule } from "./auth/auth.module";
import { RouterModule } from "@nestjs/core";

@Module({
    imports: [
        AuthModule,
        RouterModule.register([
            {
                path: "api",
                children: [
                    { path: "auth", module: AuthModule },
                ],
            },
        ]),
    ],
})
export class ApiModule {}

同时移除AppModule中RouterModule对ApiModule的单独配置,避免路径重复。

方法三:手动为子模块控制器添加前缀(不推荐)

直接在AuthController上标注@Controller('api/auth')也能实现效果,但这种硬编码方式会增加维护成本,不建议使用。

关键说明

  • RouterModule的嵌套配置是NestJS官方推荐的模块路由组织方式,能自动实现前缀继承。
  • 确保子模块控制器未设置与父前缀冲突的路由,避免路径重复。

内容的提问来源于stack exchange,提问作者lCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 01:42:12