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

NestJS动态模块问题:动态Crud端点仅首个模块生效

NestJS动态CrudModule路由仅生效第一个模块的问题与解决方法

我尝试构建一个NestJS动态模块CrudModule,用于为指定路由模块动态添加通用Crud端点。

初始实现代码

crud.module.ts

@Module({})
export class CrudModule {
  static register(config): DynamicModule {
    const controller = getController(config.route);
    return {
      module: TestModule,
      controllers: [controller],
    };
  }
}

getController.ts

function getController(route: string): Type<any> {
  @ApiTags(`${route}`)
  @Controller(`${route}/crud`)
  class CrudController {
    @Get()
    get() {
      return route;
    }
  }

  return CrudController;
}

export { getController };

问题现象

将CrudModule引入到指定路由模块Route1Module和Route2Module,再统一导入到RoutesModule中后,发现CrudModule生成的路由仅对第一个导入的Route1Module生效。日志显示两个模块都加载了CrudModule,但仅初始化一次实例。

解决方法

通过动态修改控制器名称解决了该问题,修改后两个动态控制器均成功初始化并正常工作,修改后的CrudModule代码如下:

@Module({})
export class CrudModule {
  static registre(route: string): DynamicModule {
    const Controller = getController(route);
    Object.defineProperty(Controller, 'name', { value: `${route}Controller` });
    console.log(Controller);
    return {
      module: CrudModule,
      controllers: [Controller],
      providers: [Controller],
      exports: [Controller],
    };
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:10:35