[Node.js_4기] TIL : 주특기 심화 팀프로젝트 Day2 개발일지 (24/03/19)

2024. 3. 19. 22:33공부/내배캠 TIL

목차

 

1. 문제

2. 시도

3. 결과

4. 배운점

 

1. 문제 

 

card기능에서 다른 기능을 모두 구현한 뒤

http://localhost:3000/api/card/reorder를 사용하여 

{

    "cardIds" : [1,2,3,4]

}

를 입력받아 {"1":1,"2":2,"3":3,"4":4} 순서({"id":index})로 순서를 정렬하는 기능을 구현하려 하였는데, 

{
  "statusCode": 400,
  "message": ["property xxx should not exist"],
  "error": "Bad Request"
}

형태의 오류가 발생했다.

이 오류는 dto에 정의되지 않은 값을 입력했을 경우 발생하는 오류이다.

export class ReorderCardsDto {
  @ApiProperty({ example: [1, 2, 3], description: "cardOrder" })
  @IsArray()
  @IsNotEmpty({ message: "비었어" })
  cardIds: number[];
}

number[]로 선언했음에도 문제가 발생하였다.

 

2. 시도 

 

service 입력부터 출력까지 모든 층에 console.log("어쩌고저쩌고 1", id )등을 심었다.

터미널에 아무것도 찍히지 않았다.

service자체를 주석처리하고, controller의 입출력 부분에 console.log("머시꺵이 저시꺵이")를 심었다.

마찬가지로 터미널에 아무것도 찍히지 않았다.

 

3. 결과 

 

1) 오류가 발생했던 이유

contorller에서 

api/card/:id
apicard/reorder  

위의 순서로 코드가 위치하면, nest.js는 위에서 아래로 코드를 실행하기 때문에 먼저 발견한 card/:id 디렉토리에 reorder를 넣어 함수를 실행하고, 이때 reorder의 입력{"cardIds" : [1,2,3,4]}이 updatedCardDto를 통과하지 못해 코드가 실행되지 않아 발생한 오류였다.

 

2) 해결방법

controller에서

api/card/reorder

api/card/:id 

순서로 코드를 위치시켰다.

만약 이 순서대로 코드가 실행된다면, reorder부터 실행되게 되어 입력값이 제대로된 디렉토리에 닿아 실행되며 문제가 해결된다.

 

4. 배운점 

 

해당 문제를 라우터 충돌이라고 부른다고 한다.

패턴이 겹치거나 경로 정의의 구체성이 부족하여 라우터가 서로 다른 경로를 구별할 수 없을 때 발생하며,
이로 인해 요청이 잘못된 엔드포인트로 라우팅되거나 요청 처리 중 오류가 발생하는 등 예기치 않은 동작이 발생한다고 합니다. (정확히 내가 겪었던 문제)

이를 해결하기 위해 명확한 라우터 구조를 설계할 필요가 있습니다.

 

하다하다 코드의 순서에 따라 문제가 발생해버려 머리가 띵해졌습니다...