【问题标题】:NestJS How to configure middleware with async/await?NestJS 如何使用 async/await 配置中间件?
【发布时间】:2019-10-07 22:27:30
【问题描述】:

我正在尝试在 NestJS 应用中使用公牛竞技场。

export class AppModule {
  configure(consumer: MiddlewareConsumer) {
    const queues = this.createArenaQueues();
    const arena = Arena({ queues }, { disableListen: true });
    consumer.apply(arena).forRoutes('/system/queues');
  }

  createArenaQueues() {
    return [
      {
        name: 'Notification_Emailer',
        hostId: 'MyAwesomeQueues',
        url: 'redis://localhost',
      },
    ];
}
}

这行得通!

但我需要对createArenaQueues() 使用 async/await,因为要从 db 加载队列。

export class AppModule {
  configure(consumer: MiddlewareConsumer) {
    const queues = await this.createArenaQueues();   //await here
    const arena = Arena({ queues }, { disableListen: true });
    consumer.apply(arena).forRoutes('/system/queues');
  }

  async createArenaQueues() {                       // async here
    return [
      {
        name: 'Notification_Emailer',
        hostId: 'MyAwesomeQueues',
        url: 'redis://localhost',
      },
    ];
  }
}

没用!

那么问题来了,怎么处理呢?

从“系统”控制器运行竞技场会很酷,但我想不出办法。

另外,我尝试将 arena 移至独立中间件,但不知道我到底应该做什么:返回类似 res.send(arena) 之类的东西?

处理这个问题的最简单方法是async 配置支持,但它没有实现。

【问题讨论】:

    标签: javascript node.js typescript express nestjs


    【解决方案1】:

    您可以为异步创建的arenaQueues 创建一个custom provider:

    将自定义提供程序添加到您的AppModule 的提供程序:

    providers: [
      ArenaService,
      {
        provide: 'arenaQueues',
        useFactory: async (arenaService: ArenaService) => arenaService.createArenaQueues(),
        inject: [ArenaService],
      },
    ],
    

    然后将arenaQueues 注入您的AppModule:

    export class AppModule {
      constructor(@Inject('arenaQueues') private queues) {}
    
      configure(consumer: MiddlewareConsumer) {
        // Now, you can use the asynchronously created this.queues here
        const arena = Arena({ queues: this.queues }, { disableListen: true });
        consumer.apply(arena).forRoutes('/system/queues');
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-31
      • 1970-01-01
      • 2015-09-29
      • 1970-01-01
      • 2019-07-20
      • 2021-10-10
      • 2019-07-24
      • 1970-01-01
      相关资源
      最近更新 更多