[英]NestJS How to configure middleware with async/await?
我正在尝试在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',
},
];
}
}
这可行!
但是由于从db加载队列,我需要对createArenaQueues()
使用async / await。
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',
},
];
}
}
不起作用!
那么,问题是如何处理呢?
从“系统”控制器运行竞技场是很酷的事情,但我想不出办法。
另外,我尝试将竞技场移至独立的中间件,但不知道我最终应该做些什么:返回诸如res.send(arena)
东西?
解决此问题的最简单方法是async
配置支持,但未实现。
您可以为arenaQueues
创建一个自定义提供程序 ,该提供程序是异步创建的:
将自定义提供程序添加到您的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');
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.