Search

#022 #Nest Middleware

 미들웨어

미들웨어는 라우터 핸들러 이전에 호출되는 함수이다. 미들웨어 기능은 요청 및 응답 객체에 액세스 할 수 있으며 애플리케이션의 요청/응답 생명 주기 동안 미들웨어 기능을 사용할 수 있다. Nest 미들웨어는 기본적으로 Express 미들웨어랑 동일하다.

 미들웨어 생성

 CLI를 사용해서 생성

nest g middleware logger
JavaScript
복사
logger 미들웨어를 만들어보자. 특이한 점은 @Injectable 데코레이터가 붙었다는 것!
또 알고 있어야 되는 것은 NestMiddleware가 사용하는 req, res, nextfunction이 Express에서 사용하는 것과 같다는 것이다.

 미들웨어 적용

 미들웨어를 모듈에 등록하지 못한다.

미들웨어는 의존성 주입을 해야 사용할 수 있다. 하지만 모듈에는 의존성 주입이 되지 않는다. 공식 문서를 살펴보면 @Module에는 미들웨어를 위한 자리가 없다고 한다.

 미들웨어를 위한 의존성 문법

@Module 데코레이터 내부에는 미들웨어를 위한 장소가 없으므로, → 미들웨어를 사용하기 위해서는 AppModule이 NestModule을 구현해야된다. → configure메소드는 MiddlewareConsumer를 사용하여 미들웨어를 특정 경로에 적용한다. → 특정 경로에 적용할 미들웨어를 LoggerMiddleware로 설정하고, 경로도 지정한다. (’cats') 경로에 와일드카드 * 로 지정하면 모든 요청에 대한 미들웨어가 될 수 있다. 인터셉터 같이

 미들웨어 테스트

 모든 경로 테스트

미들웨어를 모든 경로에 적용해서 한 번 테스트 해보자. 어떤 경로를 요청해도 ‘Hello, World’ 가 찍혀야되고, 미들웨어 로그인 req.ip 도 찍혀야 된다.

 postman 확인

return 값은 잘 찍혔다.

 console 확인

→ console.log로 요청했던 것은 요청 객체의 ip주소였다. → 루트백주소이기 때문에 ::1이 찍힌 것을 확인할 수 있다. → ::1 은 IPv6의 루프백 (loopback)주소를 가리킨다. 자기 자신의 주소를 말한다.

 Logger

우리는 이제것 console.log로 로그를 확인했지만, Nest에서 사용하는 로깅 라이브러리가 있다. 그게 바로 Logger 이다.
이렇게 LoggerMiddleware 에 new로 Logger를 띄우고 재요청을 해보자.

 postman 확인

postman은 기존과 변함없이 반환한다.

 console 확인

기존 로그와 같은 형태로 나온다. 아까 Logger를 띄울 때 입력했던 문자열 HTTP는 여기에 구분자로 들어가게 된다.

 response에도 미들웨어를 사용할 수 있다.

res.on 메소드로 응답에 미들웨어를 달 수 있다. 위의 코드로 응답의 ip, method, statusCode 와 요청의 originalUrl을 알 수 있다.

 확인

요청에 대한 로그와, 응답에 대한 로그가 다 같이 찍혔다.