이 글은 유튜브에 올라온 따라하면서 배우는 NestJS를 따라하면서 겪은 오류의 해결법을 공유하고자 작성합니다.
일부 내용을 변경했지만, 완성한 코드는 링크를 통해 볼 수 있습니다.
Timeline : 3시간 55분
this.userRepository.createUser is not a function
사용자 인증에 관한 코드들을 작성한 뒤, 회원가입 요청시 메소드 참조 불가 오류.
위 오류는 간단히 말하면, 데이터베이스에 관한 로직은 repository에서 수행하기 위해 createUser()
메소드를 정의한 것인데, Service에서 이 메소드를 참조하지 못하는 오류이다.
이는 typeorm@^0.3.x 버전부터는 deprecated
되어 동작하지 않는다고 하며, 아직까지 표준화된 해결법은 나오지 않았지만 여러 사람들이 각자의 해결책을 공유하고 있다.
하단의 여러 링크를 첨부하니 각자 스타일에 맞는 자료를 참고하도록 하자.
Timeline : 3시간 56분
No metadata for "UserRepository" was found.
6번째 문제에서 발생한 문제는 위 코드처럼 수정하여 해결하였다.
createUser()
메소드 제거.signUp()
메소드 안에 위 사진과 같이 내용 추가.이후, 회원가입 요청을 하였더니 이번엔 위와 같은 오류가 발생한다.
→ 이는 첫번째 글의 세번째 문제와 비슷한 부류이다.
→ Module
에서 import
를 잘못 지정한 것!!
auth.module.ts
와 auth.service.ts
의 기존 내용은 위 사진과 같다.
이를 아래에 첨부한 사진처럼 수정해보자.
기존에 UserRepository
라고 작성한 부분들을 User
로 수정하였다.
이제 서버를 실행하고, 결과를 확인해보자!
/auth/signup
에 요청을 보냈더니, user
테이블이 생겼고 Body에 작성한 정보도 제대로 저장이 된 것을 확인할 수 있다.
Timeline : 4시간 25분
typeORM repositoy API 메소드 인자 부적합 오류
영상은 1년 전에 올라와서, 그동안 typeORM의 respository API 메소드의 문법들이 많이 바뀌었다.
이 문제는 첫 번째 글에서 다룬 문제이므로 그 글을 참고하거나, 원서에서 직접 찾아보자.
where : { username : username }
Timeline : 5시간 04분
@UseGuard()
를 이용하여 요청에 사용자 정보가 들어가는 Test Method 진행시 발생하는 오류
Nest can't resolve dependencies of the JwtStrategy (?). Please make sure that the argument UserRepository at index [0] is available in the AuthModule context.
오류의 내용은 위 사진과 같다. 이 오류는 이전에 해결했던 3번째 문제와 동일한 오류!!
조금 더 내용을 첨부하자면, 에러 메시지에 있는 index[0]
은 Service에서 constructor 내부에 첫번째로 주입된 Repository를 가리킨다.
따라서 Service로 이동해 작성한 코드를 살펴보면 아래와 같다.
제일 먼저 눈에 띄는 건 @InjectRepository(UserRepository)
이다.
따라서 @InjectRepository()
의 원형을 찾아보니 아래와 같았다.
인자에 repository가 아닌 entity를 넣어야 한다!!
→ 따라서 우리가 작성한 코드에서도 @InjectRepository(User)
로 수정한다면 오류가 해결된다.