프로그래밍사업/사이드 프로젝트

[NestJS] TS2339: Property 'user' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>’. 손쉽게 에러 해결

ironwhale 2024. 10. 17. 08:52

코드팩토리님의 NestJS 강의를 복습하던 중 미들웨어 부분을 복습하고 있는데 강의를 보고 하면 에러가 발생하지 않는데 혼자 복습하면서 한 것은 req.user하면 리퀘스트(req)에 user가 없다는 에러가 나서 이 에러를 해결한 방법을 소개하도록 하겠습니다. 

TS2339: Property 'user' does not exist on type 'Request&lt;ParamsDictionary, any, any, ParsedQs, Record&lt;string, any&gt;&gt;

언제 에러가 발생하는가? 

우선 이 에러는 미들웨어를 사용해 jwt토큰을 검증하는 미들웨어를 만들때 발생 했습니다. 파싱 된 토큰 정보를 req.user에 넣어주면 컨트롤러에서 이 유저 정보를 가지고 올수 있도록 하는 부분입니다. 그런데 req에 user에 빨간불이 들어오면서 에러를 발생시켰습니다. 

TS2339: Property 'user' does not exist on type 'Request&lt;ParamsDictionary, any, any, ParsedQs, Record&lt;string, any&gt;&gt;

해당 문제로 검색 해보면 타입 정의를 새로 하는 방법을 소개하는데 저는 다른 방식으로 손쉽게 해결하는 방법을 소개해보도록 하겠습니다. 

해결방법

user를 찾지 못하는 에러의 저의 해결 방법은 @types/passport-jwt를 설치하는 방법입니다. 사실 passport로 인증 시스템을 구현하지 않더라도 별도의 타입 정의를 새로 하는 방식이 어려우신 분들은 이것을 설치하여 손쉽게 해결하실 수 있을 것입니다. 

설치방법

개발할 때만 사용하는 타입을 정의하는 패키지 이기때문에 -D를 사용해 개발 환경에서만 사용하도록 하였습니다. 

pnpm i -D @types/passport-jwt

 

스프링부트 nestJS 둘다 해보고 느낀점

확실히 nestJS가 cli툴이 로 모듈을 생성할 수 있어 스프링부트보다 좀 더 빠르게 개발이 가능한거 같습니다.