미들웨어
2022. 9. 6. 00:19ㆍNest.js
라우트 핸들러 이전에 호출되는 함수. 미들웨어 기능은 요청 및 응답 객체에 대한 액세스 권한이 next()있다.
(기본적으로 익스프레스 미들웨어와 동일)
미들웨어 기능은 다음 작업을 수행할 수 있다.
- 모든 코드를 실행
- 요청 및 응답 개체를 변경
- 요청-응답 주기를 종료
- 스택의 다음 미들웨어 함수를 호출
- 현재 미들웨어 함수가 요청-응답 주기를 종료하지 않으면 next()다음 미들웨어 함수에 제어를 전달하기 위해 호출해야 한다. 그렇지 않으면 요청이 중단.
Nest 미들웨어는 Dependency Injection을 완벽하게 지원.
공급자 및 컨트롤러와 마찬가지로 동일한 모듈 내에서 사용 가능한 종속성을 주입 할 수 있다.
nest g middleware -이름-
Logger middleware 만들기
함수 또는 @Injectable()데코레이터가 있는 클래스에서 맞춤 Nest 미들웨어를 구현합니다. 클래스는 NestMiddleware인터페이스를 구현해야 하지만 함수에는 특별한 요구 사항이 없습니다. 클래스 메서드를 사용하여 간단한 미들웨어 기능을 구현하는 것으로 시작하겠습니다.
//logger.middleware.ts
import { Injectable, Logger, NestMiddleware } from '@nestjs/common';
import { NextFunction, Request, Response } from 'express';
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
private logger = new Logger('HTTP'); //Nest 기능
use(req: Request, res: Response, next: NextFunction) {
res.on('finish', () => {
this.logger.log(
`${req.ip} ${req.method} ${res.statusCode}`,
req.originalUrl,
);
});
next();
}
}
@Module()데코레이터 에는 미들웨어가 들어갈 자리가 없습니다 . configure()대신 모듈 클래스의 메서드를 사용하여 설정합니다 . 미들웨어를 포함하는 모듈은 NestModule인터페이스를 구현해야 합니다. LoggerMiddleware수준 에서 설정합시다 AppModule.
//app.module.ts
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(LoggerMiddleware)
.forRoutes('*');
}
}
'Nest.js' 카테고리의 다른 글
Repository Pattern (0) | 2022.09.17 |
---|---|
예외처리 (0) | 2022.09.06 |
Module / 캡슐화 (0) | 2022.09.04 |
Providers/ DI (0) | 2022.09.04 |
Controller (0) | 2022.09.04 |