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
相关产品推荐
相关产品推荐

