[英]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.