Velog도 작성하였습니다.

NestJS Validation failed, 라우팅 시스템으로 인한 오류

문제 상황

export class MogacoController {
  constructor(private readonly mogacoService: MogacoService) {}

  @Get('/')
  async getAllMogaco(): Promise<Mogaco[]> {
    return this.mogacoService.getAllMogaco();
  }

  @Get('/:id')
  async getMogacoById(@Param('id', ParseIntPipe) id: number): Promise<MogacoWithMemberDto> {
    return this.mogacoService.getMogacoById(id);
  }

  @Post('/')
  async createMogaco(@Body() createMogacoDto: CreateMogacoDto, @GetUser() member: Member): Promise<Mogaco> {
    return this.mogacoService.createMogaco(createMogacoDto, member);
  }

  @Delete('/:id')
  async deleteMogaco(@Param('id', ParseIntPipe) id: number, @GetUser() member: Member): Promise<void> {
    return this.mogacoService.deleteMogaco(id, member);
  }

  @Patch('/:id')
  async updateMogaco(
    @Param('id', ParseIntPipe) id: number,
    @Body() updateMogacoDto: CreateMogacoDto,
    @GetUser() member: Member,
  ): Promise<Mogaco> {
    return this.mogacoService.updateMogaco(id, updateMogacoDto, member);
  }

  @Post('/:id/join')
  async joinMogaco(@Param('id', ParseIntPipe) id: number, @GetUser() member: Member): Promise<void> {
    return this.mogacoService.joinMogaco(id, member);
  }

  @Get('/:id/participants'
  async getParticipants(@Param('id', ParseIntPipe) id: number): Promise<ParticipantResponseDto[]> {
    return this.mogacoService.getParticipants(id);
  }

  @Delete('/:id/join')
  async cancelMogacoJoin(@Param('id', ParseIntPipe) id: number, @GetUser() member: Member): Promise<void> {
    return this.mogacoService.cancelMogacoJoin(id, member);
  }

  @Get('/by-date')
  async getMogacoByDate(@Query('date') date: string): Promise<MogacoDto[]> {
    console.log(date);

    return this.mogacoService.getMogacoByDate(date);
  }
}

이 기나긴 코드를 보자.

나는 Get 요청을 보내는 /by-date 경로의 API를 설계했다. 하지만 코드에 이상이 없는데 계속해서 오류가 났다.

콘솔로그를 찍어도 뭐 콘솔은 나오지도 않고 바로 아래의 에러코드만 나오니 도저히 어디서 오류가 났는지 쉽게 파악할 수가 없었다.

에러코드

{
    "message": "Validation failed (numeric string is expected)",
    "error": "Bad Request",
    "statusCode": 400
}

Validation에서 오류가 날 이유가 전혀 없었다.

date: string으로도 해놓았고, 중간에 Dto를 하나 더 파서 class-validator로 새롭게 유효성 검사도 한번 시도 했는데 계속해서 오류가 발생했다.

그러다가 어디서 들은 바로는 이 메서드를 놓는 순서에 문제가 있을 수 있다고 얼핏 들은 기억이 났다.