Node.js Nestjs-在普通控制器中连接主板
我使用nest.js和bull创建了一个应用程序。 我添加了bull board包来监视我的队列,但在文档中,将其添加到应用程序的唯一方法是作为中间件装载: 在main.ts中:Node.js Nestjs-在普通控制器中连接主板,node.js,nestjs,Node.js,Nestjs,我使用nest.js和bull创建了一个应用程序。 我添加了bull board包来监视我的队列,但在文档中,将其添加到应用程序的唯一方法是作为中间件装载: 在main.ts中: app.use('/admin/queues', bullUI); 在jwtauth之后,有没有办法在普通的nest控制器中添加bullUI?比如: @UseGuards(JwtAuthGuard) @Get("queues") activate() { r
app.use('/admin/queues', bullUI);
在jwtauth之后,有没有办法在普通的nest控制器中添加bullUI?比如:
@UseGuards(JwtAuthGuard)
@Get("queues")
activate() {
return UI
}
您可以在控制器中使用任何类似的express中间件,但在某些情况下可能会导致错误,例如使用Guard exception服务静态文件等
@UseGuards(JwtAuthGuard)
@获取(“队列/*”)
激活(@Req()Req,@Res()Res){
bullUI(需求、资源)
}
我已经通过中间件消费者实现了这一点,所以类似这样:
import { router } from 'bull-board';
@Module({
imports: [
NestBullModule.forRoot({ redis }),
],
providers: [],
})
export class BullModule {
configure(consumer: MiddlewareConsumer): void {
consumer
.apply(router)
.forRoutes('/admin/queues');
}
}
我想扩展最初的答案,主要是因为它很有效,而且更容易理解 我使用的不是默认的bull,而是from的一个改进版本,但是我想在这两种情况下,结果都是一样的
queue.module
文件:
@Module({
imports: [
BullModule.forRoot({
options: {
connection: {
host: redisConfig.host,
port: redisConfig.port,
},
},
}),
/** DI all your queues and Redis connection */
BullModule.registerQueue('yourQueueName'),
],
controllers: [],
providers: [],
})
export class QueueModule {
constructor (
@BullQueueInject('yourQueueName')
private readonly queueOne: Queue,
) {
/** Add queues with adapter, one-by-one */
setQueues([new BullMQAdapter(this.queueOne, { readOnlyMode: false })])
}
configure(consumer: MiddlewareConsumer): void {
consumer
.apply(router)
.forRoutes('/admin/queues');
}
}
然后通过导入将其添加到父AppModule,如下所示:
我不确定,对于父AppModule,这里是否需要Redis连接
运行
main.js
,然后访问localhost:8000/admin/queues我已经用BullMQ尝试了这个示例,并且它运行正常!非常感谢你的回答。
@Module({
imports: [
BullModule.forRoot({
options: {
connection: {
host: redisConfig.host,
port: redisConfig.port,
},
},
}),
QueueModule
],
controllers: [],
providers: [],
})
export class AppModule {}