使用工厂创建控制器

时间:2019-02-28 12:45:07

标签: javascript node.js typescript nestjs

我想知道是否可以使用工厂初始化控制器,然后将其添加到模块中。代码可能看起来像这样,但这不起作用:

const controllerFactory = {
  provide: DefinitionController,
  useFactory: async (service: DefinitionService) => {
    //initialization of controller
    return new DefinitionController();
  },
  inject: [DefinitionService],
};
@Module({
  controllers: [controllerFactory],
  providers: [DefinitionService],
})
export class DefinitionModule {}

似乎不支持将工厂用于控制器,但是我不确定。有一个using factory for providers的示例,但是我在文档或Google上找不到控制器的任何内容。

1 个答案:

答案 0 :(得分:2)

无法使用与自定义提供程序可比的异步工厂来定义控制器。除非使用本机Express / Fastify实例,否则您无法添加动态端点/路由:

  

目前,除了动态注册路由外,没有其他方法   通过使用内部HTTP / Fastify / Express实例

有一个issue讨论了动态路由模块,但这可能不会很快成为嵌套的一部分:

  

此刻,我和我俩都很忙,所以这个问题可能会发生   一段时间-除了其他人承担任务:)


但是您可以使用OnModuleInit生命周期事件进行静态初始化:

@Injectable()
export class DefinitionController implements OnModuleInit {
  onModuleInit() {
    console.log(`Initialization...`);
  }

当您的应用启动并可以访问控制器中注入的提供程序时,它将被调用一次,例如您的DefinitionService

相关问题