如何创建前缀并将其应用到 NestJS 模块及其子模块?

问题描述 投票:0回答:1

我正在开发一个 NestJS 应用程序,我正在尝试为特定模块设置前缀,并将其应用于父模块及其子模块。我定义了这样的模块结构:

/src/api/
  ├── api.module.ts
  └── auth/
       ├── auth.module.ts
       └── controller/
            └── auth.controller.ts

在我的 app.module.ts 中,我为 ApiModule 定义了一个前缀,如下所示:

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

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

在我的 api.module.ts 中:

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

@Module({
    imports: [AuthModule],
})
export class ApiModule {}

但是,该前缀似乎仅适用于 ApiModule 中的控制器,AuthModule 中的控制器不受影响。如何设置适用于 ApiModule 及其子模块(包括 AuthModule)的前缀?

任何有关如何实现这一目标的帮助或指导将不胜感激。

javascript typescript routes nestjs nest
1个回答
0
投票

当你有

RouterModule.register([
    {
        path: "api",
        module: ApiModule,
    },
]),

前缀

api
仅适用于在
ApiModule
内注册的控制器,含义:

@Module({
    controllers: [], // within this array
})
export class ApiModule {}

如果您打算将全局前缀

api
应用于所有控制器(在每个模块中),您可以在
main.ts
中执行此操作:

const app = await NestFactory.create(AppModule);
app.setGlobalPrefix('api');
© www.soinside.com 2019 - 2024. All rights reserved.