본문 바로가기

Backend/PostgreSQL and TypeORM

fidOne()과 FindOneOptions 객체

기존 코드 

async getOne(id: number): Promise<Member> {
  return this.memberRepository.findOne(id); // id만 전달
}

 

findOne(id)로 했었는데 아래와 같은 에러가 발생하였다.

Argument type number is not assignable to parameter type FindOneOptions<Member>

id가 들어가는 인자부분에서 에러가 난 것이었다. 

 

 

 

 

 

이를 해결하기 위해 일단 체크해야 할 점 

- findOne() 함수에 전달되는 파라미터는 검색할 레코드의 식별자(ex. primary key)이다. 숫자 혹은 문자열과 같은 식별자를 전달하면 해당 레코드를 찾아 반환한다. 

 

member db에서 id가 PK로 잡혀있었기에 뭐가 문제지?싶었다. 

 

사용해본 내용 'FindOneOptions'로 검색조건 지정 

where, relations, select 등 다양한 검색 옵션 지정이 가능한 객체이다. 

 

 

 

 

 

수정 후 코드 

async getOne(id: number): Promise<Member> {
  const options: FindOneOptions<Member> = {
    where: { id }, // 검색 옵션 설정
  };
  return this.memberRepository.findOne(options);
}

 

수정 후 코드로 postman을 조회해보니 id를 파라미터로 넣으면 해당 id를 가진 db의 row의 조회가 잘 되었다. 

FindOneOptions 잘 기억해두자,,