[Nest.js] 오류 해결 모음 2탄

이동엽·2022년 10월 20일
1

nestjs

목록 보기
2/3

이 글은 유튜브에 올라온 따라하면서 배우는 NestJS를 따라하면서 겪은 오류의 해결법을 공유하고자 작성합니다.

일부 내용을 변경했지만, 완성한 코드는 링크를 통해 볼 수 있습니다.


포스팅 규칙

  • 이 글을 보시기 전, 이전에 작성한 Nest.js 오류 해결 모음 1탄을 보고 오시면 도움이 됩니다.
  • 같은 영상에서의 문제점을 다루다보니, 같은 이유로 인한 오류가 발생하는 경우가 있습니다.
    • 위와 같은 경우에는, 이전에 작성한 글을 참고하라는 코멘트로 남기겠습니다.


6번째 문제

Timeline : 3시간 55분

this.userRepository.createUser is not a function

사용자 인증에 관한 코드들을 작성한 뒤, 회원가입 요청시 메소드 참조 불가 오류.

위 오류는 간단히 말하면, 데이터베이스에 관한 로직은 repository에서 수행하기 위해 createUser() 메소드를 정의한 것인데, Service에서 이 메소드를 참조하지 못하는 오류이다.

이는 typeorm@^0.3.x 버전부터는 deprecated되어 동작하지 않는다고 하며, 아직까지 표준화된 해결법은 나오지 않았지만 여러 사람들이 각자의 해결책을 공유하고 있다.


하단의 여러 링크를 첨부하니 각자 스타일에 맞는 자료를 참고하도록 하자.



7번째 문제

Timeline : 3시간 56분

No metadata for "UserRepository" was found.

6번째 문제에서 발생한 문제는 위 코드처럼 수정하여 해결하였다.

  • repository에 작성된 createUser() 메소드 제거.
  • service에 signUp() 메소드 안에 위 사진과 같이 내용 추가.

이후, 회원가입 요청을 하였더니 이번엔 위와 같은 오류가 발생한다.
→ 이는 첫번째 글의 세번째 문제와 비슷한 부류이다.
Module에서 import를 잘못 지정한 것!!

auth.module.tsauth.service.ts의 기존 내용은 위 사진과 같다.

이를 아래에 첨부한 사진처럼 수정해보자.

기존에 UserRepository 라고 작성한 부분들을 User로 수정하였다.

이제 서버를 실행하고, 결과를 확인해보자!

/auth/signup에 요청을 보냈더니, user 테이블이 생겼고 Body에 작성한 정보도 제대로 저장이 된 것을 확인할 수 있다.



8번째 문제

Timeline : 4시간 25분

typeORM repositoy API 메소드 인자 부적합 오류

영상은 1년 전에 올라와서, 그동안 typeORM의 respository API 메소드의 문법들이 많이 바뀌었다.

이 문제는 첫 번째 글에서 다룬 문제이므로 그 글을 참고하거나, 원서에서 직접 찾아보자.

💡 hint ! 아래와 같이 함수 원형에 맞게 변형하세요.

where : { username : username }



9번째 문제

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)로 수정한다면 오류가 해결된다.

profile
백엔드 개발자로 등 따숩고 배 부르게 되는 그 날까지

0개의 댓글