Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to send response from middleware created in a Nest fastify server?

I've created a NestJs project with Fastify, and have created a middleware for it, but I can't figure out how to send a response to the client, similar to how we could do in express, any help would be appreciated, thanks!, here's my middleware code:

import {
  Injectable,
  NestMiddleware,
  HttpException,
  HttpStatus,
} from '@nestjs/common';

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: any, res: any, next: Function) {
    console.log('Request...', res);
    // throw new HttpException('Forbidden', HttpStatus.FORBIDDEN);
    next();
  }
}
like image 994
Faaiz ali Khan Avatar asked Oct 21 '25 13:10

Faaiz ali Khan


1 Answers

Looks like Fastify abstraction uses NodeJS vanila http objects (The res injected here is http,ServerResponse )

// app.middleware.ts

import { Injectable, NestMiddleware } from '@nestjs/common';
import { ServerResponse, IncomingMessage } from 'http';

@Injectable()
export class AppMiddleware implements NestMiddleware {
  use(req: IncomingMessage, res: ServerResponse, next: Function) {
    res.writeHead(200, { 'content-type': 'application/json' })
    res.write(JSON.stringify({ test: "test" }))
    res.end()
  }
}
// app.module.ts

import { Module, MiddlewareConsumer, RequestMethod } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppMiddleware } from './app.middleware';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [],
})
export class AppModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(AppMiddleware)
      .forRoutes({ path: '*', method: RequestMethod.ALL }); // apply on all routes
  }
}
like image 132
Daniel Avatar answered Oct 23 '25 09:10

Daniel



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!