ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Nest.js 개요 및 객체지향 디자인 패턴 3 (Nest Middleware)
    카테고리 없음 2022. 6. 19. 22:05

    미들웨어

    미드웨어는 라우터 핸드러 이전에 호출되는 함수 입니다. 미들웨어 함수는 요청 및 응답 객체에 엑세스 할 수 있으며 next(),애플리케이션의 요청/응답 주기에서 미들웨어 함수에 접근 할 수 있다.

     

    미들웨어는 각각 순서가 존재한다.

    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();
      }
    }

    위 코드와 같이 middleware를 만든다.  middleware class를 만들때 @Injectable을 붙인다는 것은 의존성 주입(ID)가 가능 하다는 것이고, DI를 해주면 middleware 적용이 가능하다는 것이다.

     

    미들웨어 만들기

    미들웨어 적용

    import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
    import { LoggerMiddleware } from './common/middleware/logger.middleware';
    import { CatsModule } from './cats/cats.module';
    
    @Module({
      imports: [CatsModule],
    })
    export class AppModule implements NestModule {
      configure(consumer: MiddlewareConsumer) {
        consumer
          .apply(LoggerMiddleware)
          .forRoutes('cats');
      }
    }

    @Module() 데코레이터에는 미들웨어를 위한 곳이 없다. 대신에 confing() 모듈 클래스의 메서드를 사용하여 설정한다.또한  미들웨어를 포함하는 모듈은 NestModule인터페이스를 implemets 받아서 구현해야 한다. 

     

     

    logger

    요청하는 대상에 대해서, 어떤 대상이 어떤 것을 요청했는지 log를 만들어 주는 middleware를 만들어 본다.

     

    그림과 같이 cli 명령어로 middleware file을 만들어 준다.

     

    express에서 같이 .use로 미들웨어를 적용해 준다.

     

    Request => 요청하는 대상에 대한 정보가 다 담겨있다.

     

    cosumer는 controller 같은 소비자이다. 소비자에게 제공을 해줄 건데, LoggerMiddleware를 제공해 주는 것이다.

    LoggerMiddleware는 @Injectable 데코레이터가 붙어 의존성 주입이 가능한 Provider class이다.

     

    .forRoutes('cats')  cats로 시작하는 url entryPoint에 바인딩을 시켜주는 것이다.

     

    위 그림과 같이 *(와일드 카드)를 사용하면 전체 entrypoint에 대해서 LoggerMiddleware가 실행이 되는 것이다.

     

     

    logger.middleware.ts

     

    요청 URL=> Get http://localhost:3000

     

     

     

    Nest.js를 사용할 logging을 해줄 때 logger라는 class를 사용해 주면 된다. 

    위 와 같이 Logger 인스턴스를 생성하면 HTTP 프로토콜에 관한 logger를 사용할 수 있게 된다. 그리고 나서 console.log대신 this.logger.log()를 사용할 수 있다.

     

    요청 URL =>Get http://localhost:3000

     

    Request 정보 logging

    요청 URL =>Get http://localhost:3000

     

    Response 정보 logging

    요청 URL =>Get http://localhost:3000/cats

     

    [출처 - https://www.inflearn.com/course/%ED%83%84%ED%83%84%ED%95%9C-%EB%B0%B1%EC%97%94%EB%93%9C-%EB%84%A4%EC%8A%A4%ED%8A%B8/dashboard]

    댓글

Designed by Tistory.