DEV Community

Vincent Jang
Vincent Jang

Posted on

NestJS Repository DI using @InjectRepository is not working properly

NestJS 의 Service 에서는 다음과 같이 레포지토리를 연결한다.

constructor(
    @InjectRepository(UserRepository)
    private userRepository: UserRepository
    ...
    ) {}
Enter fullscreen mode Exit fullscreen mode

NestJS 공식 도큐먼트에서는 위와같이 사용하는것을 권장하는 듯 하다만,

이렇게 개발하던 도중..

갑자기 TypeOrm 에서 기존까지 잘 작업이 되다가 갑자기 띄운 500 에러와 함께 콘솔에 다음과 같은 오류를 띄웠다

Typeorm Cannot read property 'findOne' of undefined

처음엔 TypeOrm 의 설정부분에서 .env 파일의 비동기화 문제로 모듈이나 레포지토리가 undefined 일 수 있다고 생각하여 콘솔로 찍어 보았지만, 해당 메소드 (.findOne) 와 모듈, 레포지토리는 정상적으로 존재했다.

다음엔 TypeOrm 모듈이 문제일 수 있다고 판단하여 node_modules 를 싹 지우고 다시 npm install 을 해보았지만 증상은 그대로였다.

Stack-Overflow 에 검색 해본 결과 다음과 같은 해결책을 제시받았다.


private repository: Repository
constructor(private readonly connection: Connection) {
  this.repository = this.connection.getCustomRepository(Repository);

}
Enter fullscreen mode Exit fullscreen mode

데코레이터 @InjectRepository 를 사용하지 않고
자바와 같이 private 멤버로 명시적으로 선언하고 생성자에서 직접적으로 인스턴스를 넣어주는 방식을 사용하는 것이다.

적용해 본 결과성공적으로 동작하였다.

이유를 찾아보려고 했지만 쉽지 않아 먼저 스스로 시도했던 방법과 해결책만 간단히 적어둔다.

Top comments (2)

Collapse
 
kimh4nkyul profile image
KimH4nKyul

헉 한국인이셨어요?

Collapse
 
vincentjang profile image
Vincent Jang

네네 한국인이었습니다 ㅋㅋㅋㅋㅋ 이제 답글을 봤습니다.