NestJS에서 오늘 개발을 하다가 너무나 허무한 실수를 해버렸다.
이참에 그간 당연시 사용하고 있었던 부분에 대해서 왜 그렇게 사용을 해야만 하는지에 대해서 포스팅 해보려한다.
해당코드를 보면 Controller에서 @Param('uuid')과 @Body() 로 파라미터를 service부 한테 넘겨주고 있는 코드다.
이상이 없다고 생각해서 계속 돌려봤는데 값이 안나오고 오류도 안뜨고 해서 뭐지 싶었다..(?)
그래서 어디서 잘못됬나 확인해보려 console.log()를 하나씩 찍어가면서 확인해봤는데
어라.. console.log(uuid)의 결과가 undefined로 나왔다.
보자마자 급하게 개발하느라 뭔가 빠뜨렸구나 싶었다.
그래서 차근차근 봤더니 @Param을 사용하고 경로에다가 추가를 안해버렸던 것이였다.
@Post에다가 @Param()에서 사용중인 uuid 경로를 추가 해주니 정상적으로 작동했다.
여태 아무생각없이 @Param을 쓰면 경로를 추가 해줬는데 왜 꼭 해줘야되는지 궁금해졌다.
차근차근 알아보자.
@Param은 라우트 파라미터 값을 나타내는 데코레이터이다.
@Param을 사용하여 HTTP요청의 경로 매개변수를 추출하는데 사용되며,
해당 값을 핸들러 함수의 매개변수로 전달한다.
그래서 반드시 HTTP 요청메소드 데코레이터에 설정된 값과 @Param()에 들어가는 값이 서로 똑같아야 한다.
그렇지 않으면 파라미터 값을 찾을 수 없다.
경로를 지정하지 않으면 파일을 찾을 수 없는 에러나 혹은 현재 작업 디렉토리를 기준으로 파일을 찾게 된다.
따라서 @Param()을 사용할 때는 항상 파일의 위치를 명확하게 지정해줘야만 한다.
이래서 경로없이 console.log()를 찍었을 때 undefined가 나왔던 것이다.
'Web > NestJS' 카테고리의 다른 글
[Nest.JS] DTO 객체의 키 이름 변경 @Transform (0) | 2023.04.06 |
---|---|
[NestJS] DB커넥션을 최소화하고 Service부에 부하를 줘야하는 이유. (0) | 2023.03.27 |
[Nest.JS] @Query() 파라미터 값 Boolean으로 사용하는 방법 (2) | 2023.03.01 |
[Nest.JS] Error "require statement not part of import statement." 해결 방법 (0) | 2023.02.27 |
[Nest.JS] Promise { <pending> } 해결 방법 (0) | 2023.02.23 |