【问题标题】:Getting the metadata of the Module in NestJs在 NestJs 中获取 Module 的元数据
【发布时间】:2020-12-16 00:44:35
【问题描述】:

所以,我遇到了需要获取当前模块及其控制器的元数据的情况。

ClosedModule.ts

// all imports to AModule, BModule
@Module({
    imports: [
        DiscoveryModule, // given by nest/core
        AModule, // it has a controller AController whose base path is A/ and has 1 function for @Get a1
        BModule, // it has a controller BController whose base path is B/ and has 1 function for @Get b1
    ],
})
export class ClosedModule implements OnModuleInit { // ---> (X)

    constructor(private readonly discovery: DiscoveryService) {}

    public async onModuleInit() {
        const controllers = await this.discovery.getControllers({});
        controllers.map(c => console.log('---->', c.name));
    }
}

在上面的代码中:

DiscoveryService,从'@nestjs/core'导入的DiscoveryModule;

我尝试使用上述代码获取信息。但是,有一些问题:

  1. 我正在获取阵列中的所有控制器,而我只需要 ClosedModule 类的控制器引用,即当前类 (X)。

  2. 我怎样才能得到一个模块下所有控制器的基本路径。

    2.1 其他模块

    2.2 其他控制器

提前致谢 快乐编码:)

【问题讨论】:

    标签: node.js typescript nestjs


    【解决方案1】:

    您可以在模块的构造函数中访问一个容器,该容器具有为导入模块提供的所有配置。

    这里

    @Module({})
    export class YourModules {
      constructor(readonly modulesContainer: ModulesContainer) {
        const modules = [...modulesContainer.values()];
        for (const nestModule of modules) {
          const modulePath: string = Reflect.getMetadata(MODULE_PATH, nestModule.metatype);
        }
      }
    // ...
    }
    

    您可以在nestjsx/nest-router 库中找到更详细的示例。

    【讨论】:

    • 感谢您的回答,但它并没有只为我的 LOADED 模块提供信息,而是提供所有模块信息
    猜你喜欢
    • 1970-01-01
    • 2020-06-29
    • 2020-10-10
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    相关资源
    最近更新 更多