[NestJS] - 23. NestJS 미들웨어(Middleware)

2023. 3. 5. 19:30
반응형

NestJS에서도 Express와 같이 미들웨어를 사용할 수 있다.

이전 포스팅에서 Winston을 이용한 Logging에 대해서 알아보았었는데,

이번에는 요청이 들어오기 전 미들웨어를 이용하여 요청들을 로그를 남겨보는 작업을 해보려고 한다.

 


미들웨어 작성

 

미들웨어는 클라이언트의 요청을 컨트롤러의 핸들러가 처리하기 전에 로직을 실행하게 할 수 있다.

기본적으로 사용하는 방법은 Express의 미들웨어와 유사하다.

 

▶ /src/commons/middleware/logger.middleware.ts

 

import { Injectable, Logger, NestMiddleware } from '@nestjs/common';
import { Request, Response } from 'express';

@Injectable()
export class RequestMiddleware implements NestMiddleware {
  constructor(private readonly logger: Logger) {}
  use(req: Request, res: Response, next: Function) {
    this.logger.log(
      JSON.stringify({
        url: req.url,
        query: req.query,
        body: req.body,
      }),
    );
    next();
  }
}
  • NestJS는 미들웨어로 사용할 수 있는 NestMiddleWare 인터페이스를 제공한다.
  • 해당 인터페이스를 구현해주어 미들웨어 클래스를 만들어준다.
  • use(request, response, next) 메서드 안에 미들웨어에서 실행할 로직을 작성해준다.
  • 로직이 완료되면 next()를 통해서 미들웨어 실행 완료 후 이어서 라우터 핸들러가 처리하도록 만들어준다.
  • 미들웨어 안에서는 요청에 대한 정보를 Logging하도록 코드를 작성하였다.

 

 


미들웨어 연결

 

@Module({
  imports: [
	//...
  ],
  controllers: [],
  providers: [],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(RequestMiddleware)
      .forRoutes({ path: '*', method: RequestMethod.ALL });
  }
}

작성한 미들웨어는 module에서 NestModule을 구현하면서 연결해 줄 수 있다.

위의 코드는 RequestMiddleware를 forRoutes의 라우팅 핸들러에 들어가기 전에 실행하게 해준다.

 

 

 

 


 

미들웨어를 통과하여 요청의 정보가 로그로 남는 것을 확인할 수 있다.

 

 

 

Reference

 

https://www.wisewiredbooks.com/nestjs/overview/06-middleware.html

 

미들웨어 - 쉽게 풀어 쓴 Nest.js

미들웨어는 클라이언트로부터 들어온 요청을 각 컨트롤러의 요청 핸들러가 처리하기 이전에 코드를 실행할 수 있는 기능입니다. 미들웨어 함수는 애플리케이션의 요청-응답 주기에서 요청(reque

www.wisewiredbooks.com

https://j-ho.dev/feature-2/

 

NestJS 로깅 도입하기 (winston)

웹 API 서버를 운영할 때 중요한 것 중 하나가 바로 로그를 쌓는 것입니다. NestJS에 NodeJs의 대표적인 로그 모듈 중 하나인 winston을 도입해 로그를 남기는 방법을 알려드리고자 합니다. Middleware 미

j-ho.dev

 

반응형

BELATED ARTICLES

more