Nestjs로 Repository에 코드를 작성하던 중에
export class AgreementApiRepository extends Repository<AgreementApiRepository> {
async findByAddress(walletAddress: string) {
return this.findOne({ where: { walletAddress: ILike(walletAddress) } });
}
}
이런 내용을 작성하였다. 그런데 내가 안에 삽입했던 로직에서 에러가 나고 있었다. where절 안에서 발생하는 에러였다.
에러상황
TS2322: Type '{ walletAddress: FindOperator<string>; }' is not assignable to type 'FindOptionsWhere<AgreementApiRepository> | FindOptionsWhere<AgreementApiRepository>[]'. Object literal may only specify known properties, and 'walletAddress' does not exist in type 'FindOptionsWhere<AgreementApiRepository> | FindOptionsWhere<AgreementApiRepository>[]'.
이 말인 즉슨, 위에서 export class로 선언한 Repository<> 부분에서 <>안에 레포지터리가 올게 아니라, 엔티티명이 와야 하는 것이다.
Why ??
TypeORM의 findOne 메서드는 엔티티를 조회하는데 사용이 되는데,
인자로 FindOneOptions 타입의 객체를 받는다. 이 객체는 typeorm의 엔티티와 관련된 쿼리 옵션들을 지정하는데 사용이 된다.
따라서 AgreementApiRepository에서 findOne() 메서드를 사용할때 인자로 전달되는 객체의 형식은 FindOneOptions와 관련된 형식이어야 한다. -> where 속성을 사용하여 쿼리 조건 지정 가능.
실제로 사용되는 엔티티 클래스를 정확하게 지정을 해야하는데, 나는 엔티티명이 아닌 레포지터리명으로 지정을 했기 때문에 위와 같은 에러가 발생한 것이었다.
앞으로 repository 작성할때 주의하자!
'Backend > NestJS' 카테고리의 다른 글
QueryFailedError: invalid input syntax for type uuid (0) | 2023.07.21 |
---|---|
timestamp 처리하는 방법 (0) | 2023.07.21 |
[TypeORM] @OneToMany 그리고 @ManyToOne에서 추가로 알게 된 것들 (0) | 2023.07.02 |
unknown_request_mapping_exception_1.UnknownRequestMappingException(metatype); (0) | 2023.03.24 |
model의 역할 + 게시판의 기본 구성 살펴보기 (0) | 2023.03.20 |