728x90
반응형

이 포스트는 전 포스트에서 이어집니다.

 

 

 

https://docs.nestjs.kr/middleware

 

네스트JS 한국어 매뉴얼 사이트

네스트JS 한국, 네스트JS Korea 한국어 매뉴얼

docs.nestjs.kr


 

Nest 미들웨어는 기본적으로 express 미들웨어와 동일하다. 

 

  • 모든 코드를 실행하십시오.
  • 요청 및 응답 객체를 변경합니다.
  • 요청-응답주기를 종료합니다.
  • 스택의 next 미들웨어 함수를 호출합니다.
  • 현재 미들웨어 함수가 요청-응답주기를 종료하지 않으면 next()를 호출하여 next 미들웨어 기능에 제어를 전달합니다. 그렇지 않으면 요청이 중단됩니다.

 


Request가 들어올 때 로그로 확인하기 위한 미들웨어를 작성해보자.

 

/src/common/middleware/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에서 전 포스트에서 작성한 UserModule을 import하고 다음과 같이 수정하자.

app.module.ts

import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './user/user.module';
import { LoggerMiddleware } from './common/middleware/logger.middleware';

@Module({
  imports: [UserModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(LoggerMiddleware)
      .forRoutes('user');
  }
}

 

이제 Swagger에서 요청을 보내보자.

 

 

콘솔을 확인해보면 미들웨어에서 작성한 내용이 잘 뜨는 것을 확인할 수 있다.

 

미들웨어에서 한 번 들어온 데이터를 검증하고 next()로 넘길 수 있다. 

( 토큰이나 쿠키를 확인하는 것 등)

 

 

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(req.body)
    next();
  }
}

 

swagger로 요청을 보내보면

 

 

잘 확인되는 것을 볼 수 있다.

 

참고로 이렇게 예외 상황도 만들 수 있다.

consumer
  .apply(LoggerMiddleware)
  .exclude(
    { path: 'cats', method: RequestMethod.GET },
    { path: 'cats', method: RequestMethod.POST },
    'cats/(.*)',
  )
  .forRoutes(CatsController);
728x90
반응형

'Back-End > Nest.js' 카테고리의 다른 글

Nest.js | Swagger  (0) 2021.10.28
Nest.js | MongoDB | PATCH and DELETE  (0) 2021.10.06
Nest.js | MongoDB | Create  (0) 2021.10.06
Nest.js | MongoDB | Find  (0) 2021.10.06
Nest.js | MongoDB | Model,Schema,Controller  (0) 2021.10.06

+ Recent posts