Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Nestjs-在普通控制器中连接主板_Node.js_Nestjs - Fatal编程技术网

Node.js Nestjs-在普通控制器中连接主板

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

我使用nest.js和bull创建了一个应用程序。 我添加了bull board包来监视我的队列,但在文档中,将其添加到应用程序的唯一方法是作为中间件装载:

在main.ts中:

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 {}