[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
반응형
'Backend > Node.js (NestJS)' 카테고리의 다른 글
[NestJS] - 25. 파일 업로드 (0) | 2023.03.06 |
---|---|
[NestJS] - 24. NestJS 예외 처리와 필터(Filter) 적용 (0) | 2023.03.05 |
[NestJS] - 22. NestJS Logging - Winston 연결하기 (0) | 2023.03.05 |
[NestJS] - 21. 결제 프로세스와 Transaction Isolation (0) | 2023.03.05 |
[NestJS] - 20. 인증과 인가 - OAuth2 Google 소셜 로그인 (0) | 2023.03.05 |