[NestJS] 5. Middleware

Hannah·2023년 4월 14일
0

nestjs

목록 보기
5/9

! 읽기 전
이 시리즈에 있는 모든 글은 블로그 지향 기반 개발 & 공식 문서 기반으로 작성되었습니다 내용은 정확하지 않을 수도 있으며, 100% 신뢰하지 마시길 바랍니다


  • 수행 작업
    • 어떤 코드를 실행
    • 요청 및 응답 오브젝트를 변경
    • 요청-응답주기로 종료
    • 스택에서 다음 미들웨어 함수를 호출
    • 현재 미들웨어 함수가 요청-응답주기를 종료하지 않으면 next()를 호출하여 다음 미들웨어 기능으로 제어를 전달. 그렇지 않으면 요청이 중단

make middleware example 1

@Injectable()
export class LoggerMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: Function) {
    console.log('Request...');
    next();
  }
}

make middleware example 2

@Injectable()
export class LoggerMiddleware {
  use(req, res, next) {
    console.log('Request...');
    next();
  }
}

apply example 1

@Module({
  imports: [CatsModule],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(LoggerMiddleware)
      .forRoutes('cats');
  }
}

apply example 2

@Module({
  imports: [CatsModule],
})
export class AppModule {
  configure(consumer) {
    consumer
      .apply(LoggerMiddleware)
      .forRoutes('cats');
  }
}

제외 시킬수도 있음

consumer
  .apply(LoggerMiddleware)
  .exclude(
    { path: 'cats', method: RequestMethod.GET },
    { path: 'cats', method: RequestMethod.POST }
  )
  .forRoutes(CatsController);

함수도 됨

export function logger(req, res, next) {
  console.log(`Request...`);
  next();
};

///////

consumer
  .apply(logger)
  .forRoutes(CatsController);

순차적으로 여러개도 됨

consumer.apply(cors(), helmet(), logger).forRoutes(CatsController);

글로벌로 설정하려면

const app = await NestFactory.create(AppModule);
app.use(logger);
await app.listen(3000);

이렇게 하면 됨

음. 그렇다.

정리하자면… 엔드포인트의 필터로 볼 수 있다.

profile
backend developer

0개의 댓글