NestJS 의 Service 에서는 다음과 같이 레포지토리를 연결한다.
constructor(
@InjectRepository(UserRepository)
private userRepository: UserRepository
...
) {}
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);
}
데코레이터 @InjectRepository
를 사용하지 않고
자바와 같이 private 멤버로 명시적으로 선언하고 생성자에서 직접적으로 인스턴스를 넣어주는 방식을 사용하는 것이다.
적용해 본 결과성공적으로 동작하였다.
이유를 찾아보려고 했지만 쉽지 않아 먼저 스스로 시도했던 방법과 해결책만 간단히 적어둔다.
Top comments (2)
헉 한국인이셨어요?
네네 한국인이었습니다 ㅋㅋㅋㅋㅋ 이제 답글을 봤습니다.