nestjs / nest

A progressive Node.js framework for building efficient, scalable, and enterprise-grade server-side applications with TypeScript/JavaScript 🚀
https://nestjs.com
MIT License
65.7k stars 7.47k forks source link

Fastify middleware doesn't apply correctly when matched against routes registered via a Fastify plugin. #11802

Open DennisSnijder opened 1 year ago

DennisSnijder commented 1 year ago

Is there an existing issue for this?

Current behavior

I'm currently working on a NestJS module which registers a UI and some endpoints via a Fastify plugin using a prefix.

 this.adapterHost.httpAdapter
        .getInstance()
        .register(this.registerPlugin(), {prefix: '/my-prefix'});

When registering a middleware for the routes matching the prefix, the middleware won't trigger.

configure(consumer: MiddlewareConsumer): any {
    consumer
      .apply(MyMiddleware)
      .forRoutes('/my-prefix', 'my-prefix', '/my-prefix/*')
 }

Minimum reproduction code

https://github.com/DennisSnijder/nestjs-bull-board-example

Steps to reproduce

  1. yarn install
  2. docker-compose up -d
  3. yarn start:dev
  4. visit: http://localhost:3000/queues

Expected behavior

When the configured routes for the endpoint is being reached, it should trigger the middleware provided.

Package

Other package

No response

NestJS version

10.0.0

Packages versions

[System Information] OS Version : macOS Unknown NodeJS Version : v16.20.0 YARN Version : 1.22.19

[Nest CLI] Nest CLI Version : 10.0.1

[Nest Platform Information] platform-express version : 10.0.0 platform-fastify version : 10.0.0 schematics version : 10.0.1 testing version : 10.0.0 bullmq version : 1.1.0 common version : 10.0.0 core version : 10.0.0 cli version : 10.0.1

Node.js version

16.20

In which operating systems have you tested?

Other

In the AppModule the middleware is being registered with the desired routes (in this example /queues). The Fastify plugin is registered through the "BullBoardModule" see: https://github.com/felixmosh/bull-board/blob/master/packages/nestjs/src/bull-board.root-module.ts#L30

Interesting thing to notice: when reaching to an not existing url, the middleware does register (I guess it falls back to the NestJS route handler?) for example https://localhost:3000/queues/non-exisiting-route

DennisSnijder commented 1 year ago

Might be related to #11572 ?

mareksuscak commented 4 months ago

@kamilmysliwiec is there any official recommendation as to how to get middleware to run before the routes registered with a plugin?

freebeego commented 1 month ago

?