NestJS 커스텀 데코레이터

권태형·2023년 4월 25일
0

NestJS 연습

목록 보기
11/19
post-thumbnail

이전 포스팅에서 토큰을 인증하고 req에 user객체를 담아주었는데 담을 때 아래의 이미지와 같이 user에는 id와 nickname을 담았었다.

하지만 req.user에서 바로 id를 꺼내서 쓰려고 하니 User에는 id타입이 없다고 에러를 반출한다.

req.user.id에서 user를 ctrl+click으로 step-in해 보면 Express의 Request인터페이스에 User라는 인터페이스가 있지만, User는 빈 객체만 있을 뿐 다른 속성타입을 가지고 있지 않다.

이러한 문제를 해결하기 위해서는 any타입으로 선언된 유저에 req.user를 담고, 거기서 다시 userId를 선언해 user.id를 변수에 담아서 사용하는 방법이 있다.

물론 코드를 쓰는데 몇개 안되는 문자로 작성하는 쉬운 방법이지만, 이러한 방법은 타입을 보장하기 힘든 any타입을 사용하게 되고, 매번 라우터에서 user.id를 사용하려면 썻던 것을 굳이 또 써서 코드를 지저분하게 만들 수 있다.

이러한 단점을 보완하고 좀 더 깔끔한 코드를 만들때 @Req()데코레이터가 아닌, 커스텀으로 데코레이터를 만들어서 해결하는 방법이 있다.

createParamDecorator함수를 이용해서 커스텀 데코레이터를 만든다.
실행 컨택스트에서 리퀘스트를 뽑아와서 req변수에 담고 req의 user만 꺼내올 수 있도록 리턴을 주면 아래와 같이 만들어둔 GetUser데코레이터를 사용해서 user.id를 바로 사용할 수 있게 된다.

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

0개의 댓글