[NestJS] Unknown column in where clause 에러 발생

2024. 7. 25. 15:27NestJs

728x90
반응형

 

서론

admin 권한으로 user 권한인 유저들의 신고 목록을 조회하는 기능을 개발하던 중 "Unknown column '' in 'where clause'"라는 에러가 발생했습니다. 이 문제는 클래스 객체 안에서 코드를 최상단으로 이동시키는 방법으로 해결할 수 있었습니다.

 

에러 발생

 

 

문제 코드

  @UseGuards(JwtAccessGuards, RolesGuard)
  @Roles(UserRoles.ADMIN)
  @Get("admin")
  async adminReport(@Query("page") page: number, @Query("limit") limit: number) {
    page = page && page > 0 ? page : 1;
    limit = limit && limit > 0 ? limit : 20;
    const { reports, pagination } = await this.reportsService.adminReport(page, limit);
    return {
      statusCode: HttpStatus.OK,
      message: "유저 신고 목록 조회에 성공하였습니다.",
      data: reports,
      meta: pagination,
    };
  }

 

 

 

문제 원인

라우팅 순서와 와일드카드 라우터의 충돌로 인해 다른 메서드가 잘못 호출된 것으로 보입니다. 특히, :id와 같은 와일드카드 라우트를 위에 선언할 경우, 특정 라우트가 예상치 못한 방식으로 매칭되어 발생하는 문제였습니다. 클래스 안에서 admin 관련 라우트를 하단에 두었더니 이 충돌이 발생했습니다.

 

 

해결 방법

구글링을 통해 Stack Overflow에서 관련 문제를 찾았습니다. 해결 방법은 :id 와일드카드 라우트를 상단에 위치시키지 않도록 하여 라우트의 우선순위를 조정하는 것이었습니다. 따라서, admin 관련 라우트를 클래스 최상단으로 이동시켜 문제를 해결했습니다.

 

@Controller('reports')
export class ReportsController {
  // 최상단에 admin 라우트를 배치하여 우선순위 조정
  @UseGuards(JwtAccessGuards, RolesGuard)
  @Roles(UserRoles.ADMIN)
  @Get("admin")
  async adminReport(@Query("page") page: number, @Query("limit") limit: number) {
    page = page && page > 0 ? page : 1;
    limit = limit && limit > 0 ? limit : 20;
    const { reports, pagination } = await this.reportsService.adminReport(page, limit);
    return {
      statusCode: HttpStatus.OK,
      message: "유저 신고 목록 조회에 성공하였습니다.",
      data: reports,
      meta: pagination,
    };
  }

  // 다른 라우트들을 그 아래에 배치
  @Get(':id')
  async getReport(@Param('id') id: string) {
    // 구현 내용
  }

  // 추가 라우트들
}

 

참고자료 

 

 

TypeORM / MySQL - QueryFailedError: Unknown column 'NaN' in 'where clause'

I need help. I'm developing an API using Express and NodeJS with TypeScript, and I'm using TypeORM for database operations. I'm trying to create a function where I list and return all the appointme...

stackoverflow.com

 

728x90
반응형