미들웨어는 요청과 응답 사이에서 실행되는 함수로, 요청 데이터의 처리, 인증, 로깅, 에러 처리 등 다양한 역할을 수행할 수 있습니다.
import { Injectable, NestMiddleware } from '@nestjs/common';
import { Request, Response, NextFunction } from 'express';
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
console.log('Request...');
next();
}
}
공식문서를 보면 next() 함수도 미들웨어라고 하는 내용이 있습니다.
next() 함수를 호출하면 req와 res 사이에서 특정 조건에서 응답을 다음 미들웨어로 반환하거나, 오류를 처리합니다.
즉, req, res 사이에서 어떠한 작업을 하는 것 뿐입니다.
NestJS는 미들웨어를 클래스로 작성하고 모듈에 등록해 사용하는 방식으로 미들웨어를 작성합니다.
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction) {
console.log('Request...');
next();
}
}
....
@Module({
imports: [CatsModule],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) { // 여기
consumer
.apply(LoggerMiddleware)
.forRoutes(path: 'cats', method: RequestMethod.POST);
}
}
1. NestModule 인터페이스를 구현: AppModule 클래스는 NestModule 인터페이스를 구현합니다.
2. configure 메서드 정의: NestModule 인터페이스를 구현하기 위해 configure 메서드를 정의합니다.
3. MiddlewareConsumer 사용: configure 메서드는 MiddlewareConsumer 객체를 인수로 받습니다. 이 객체를 사용해 미들웨어를 설정할 수 있습니다.
- apply(LoggerMiddleware): LoggerMiddleware를 적용합니다.
- forRoutes({ 'cats' }): /cats 경로에, HTTP POST method만 LoggerMiddleware를 적용합니다.
- forRoutes({ path: '*', method: RequestMethod.ALL }); 모든 경로에 적용하고 모든 HTTP 메서드에 대해 적용합니다.
- forRoutes({ path: 'cats', method: RequestMethod.ALL }); /cats 경로에만 LoggerMiddleware를 적용하고 모든 HTTP 메서드(GET, POST, PUT, DELETE 등)에 대해 미들웨어를 적용합니다.
요약
- configure 메서드는 NestModule 인터페이스를 구현하는 모듈 클래스 내에서 정의됩니다.
- configure 메서드는 미들웨어를 설정하고 적용하는 데 사용됩니다.
- MiddlewareConsumer 객체를 사용해 특정 경로와 HTTP 메서드에 미들웨어를 적용합니다.
참고
'JaveScript > NestJS' 카테고리의 다른 글
Guard (0) | 2024.06.14 |
---|---|
예외 필터 (0) | 2024.06.13 |
@Module() (0) | 2024.06.10 |
Provider (0) | 2024.06.09 |
@Body() 데코레이터 (1) | 2024.06.08 |