Open2

nestjsのglobal middlewereの利用方法

oosukeoosuke

下記のようなmiddlewereがあるとするこれを全てのルートハンドラに適用する場合の例

export class LoggerMiddleware implements NestMiddleware {
  use(
    req: FastifyRequest['raw'],
    res: FastifyReply['raw'],
    next: (error?: any) => void,
  ) {
    console.log(`Request...`);
    next();
  }
}

下記のようにインタンス化したのちにuseメソッドを呼び出す

async function bootstrap() {
  const app = await NestFactory.create<NestFastifyApplication>(
    AppModule,
    new FastifyAdapter({ logger: false }),
  );
  app.use(new LoggerMiddleware().use);
  await app.listen(process.env.PORT || 3000, '0.0.0.0'); // 外部ホストからのAPIを受け入れるため0.0.0.0を指定する
}
bootstrap();
oosukeoosuke

起点となるModuleに適用する場合は以下

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(LoggerMiddleware).forRoutes('*');
  }
}