반응형
NestJS - 7편 (미들웨어)
미들웨어란?
라우트 핸들러가 클라이언트의 요청을 처리하기 전에 수행되는 컴포넌트
주로 아래의 작업들을 수행한다.
- 쿠키 파싱: 쿠키를 파싱하여 사용하기 쉬운 데이터 구조로 변경합니다. 이를 이용하면 라우터 핸들러가 매번 쿠키를 파싱할 필요가 없습니다.
- 세션 관리: 세션 쿠키를 찾고, 해당 쿠키에 대한 세션의 상태를 조회해서 요청에 세션 정보를 추가합니다. 이를 통해 다른 핸들러가 세션 객체를 이용할 수 있도록 해 줍니다.
- 인증/인가: 사용자가 서비스에 접근 가능한 권한이 있는지 확인합니다. 단, Nest는 인가를 구현할 때 가드(Guard)를 이용하도록 권장하고 있습니다.
- 본문(body) 파싱: 본문은 POST/PUT 요청으로 들어오는 json 타입뿐 아니라 파일 스트림과 같은 데이터도 있습니다. 이 데이터를 유형에 따라 읽고 해석한 다음 파라미터에 넣는 작업을 합니다. 앞서 컨트롤러 장에서 보았던 본문은 이렇게 분석된 결과가 포함되어 있습니다.
모듈에서 미들웨어 사용하기
들어온 요청에 포함된 정보를 로깅하는 Logger를 미들웨어로 구현해보자
src/logger/logger.middleware.ts
파일
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();
}
}
app.module.ts
파일
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { LoggerMiddleware } from './logger/logger.middleware';
import { UsersModule } from './users/users.module';
@Module({
imports: [UsersModule],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer): any {
consumer
.apply(LoggerMiddleware)
.exclude({path:'user/list', method: RequestMethod.GET}) //이 url에 대해서는 Middleware 사용 제외
.forRoutes('/users');
}
}
/users
로 들어오는 요청시 콘솔에 로그가 찍히는 걸 볼 수 있고/user/list
로 들어오는 요청시 콘솔에 로그가 찍히지 않는 걸 볼 수있다.
또 다른 미들웨어를 사용하려면 apply(LoggerMiddleware, AnotherMiddlerware)
등으로 ,
로 구분해 사용하면된다.
전역으로 미들웨어 사용하기
src/logger3/logger3.middleware
원하는곳에 해도 상관없음~
import { Request, Response, NextFunction } from 'express';
export function logger3(req: Request, res: Response, next: NextFunction) {
console.log(`Request3...`);
next();
};
main.ts
파일에서 적용시키기
import { logger3 } from './logger3/logger3.middleware';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.use(logger3);
await app.listen(3000);
}
bootstrap();
참조 : NestJS로 배우는 백엔드 프로그래밍
반응형
'[NestJS]' 카테고리의 다른 글
# NestJS에서 Handlebars 이용하기 (0) | 2022.06.22 |
---|---|
[NestJS] - 8편 (JWT) (0) | 2022.04.21 |
[NestJS] - 6편 (DB연결하기 TypeORM 트랜잭션 마이그레이션) (0) | 2022.04.21 |
[NestJS] - 5편 (파이프) (0) | 2022.04.20 |
[NestJS] - 4편 (모듈~config파일) (0) | 2022.04.20 |