[NestJS] | 데코레이터 개념과 예시

Hayeon LEE·2024년 3월 28일
0

NestJS

목록 보기
2/4
post-thumbnail

@Controller


(alias) Controller(prefix: string | string[]): ClassDecorator (+2 overloads)
import Controller
  • @Controller는 경로(prefix)를 받아서 해당 경로에 대한 요청을 처리할 수 있는 컨트롤러를 정의하는 데 사용한다.이 prefix의 값은 해당 컨트롤러에 대한 모든 라우트의 경로에 적용되므로 기본 경로라고 볼 수 있다. 따라서 위의 코드에서 기본 경로가 /movie 임을 나타낸다.
    MoviesController클래스는 @Controller 사용했기 때문에 해당 클래스는 주어진 경로에 해당하는 메서드(예제 코드에선 getAll,getOne,search)를 HTTP응답을 생성할 수 있다.

@Query, @Param, @Body

@Query

(alias) Query(property: string, ...pipes: (PipeTransform<any, any> | Type<PipeTransform<any, any>>)[]): ParameterDecorator (+2 overloads)
import Query
  • @Query는 HTTP 요청의 쿼리 파라미터에서 값을 추출하고 해당 값을 반환한다.
    @Query의 매개변수인 property는 추출하고자 하는 쿼리의 이름을 나타낸다. 즉, HTTP 요청에서 해당 이름과 일치하는 쿼리 파라미터를 찾아 값을 추출한다.
    예를 들어, 예제 코드에서 year를 지정하면 HTTP 요청에서 ?year=2000과 같은 형식의 쿼리 값을 추출한다. 이 추출된 값에 대해 결과를 반환하거나 변환 또는 유효성 검사를 실행하는 데 사용하는 것이 두 번째 매개변수인 pipes이다.

@Param

(alias) Param(property: string, ...pipes: (PipeTransform<any, any> | Type<PipeTransform<any, any>>)[]): ParameterDecorator (+2 overloads)
import Param
  • @Param는 첫 번째 매개변수인 경로 매개변수의 이름을 나타내고,property값에 해당하는 값을 반환한다.이 반환 값을 두 번째 매개변수 pipes에 할당하는 것이다.

@Query와 @Param의 차이 점

@Query는 쿼리 파라미터의 값을 받아올 때 사용한다.
(예. movies/search?year=2000), "?" 뒤에 변수의 값을 받는다. 정렬이나 필터링을 할 때 주로 사용되고,
@Param은 요청 주소에 포함되어 있는 값을 받는다.
(예. /movies/333)
즉, 어떤 리소스를 식별하고 싶을 때 사용된다.

@Body

(alias) Body(): ParameterDecorator (+2 overloads)
import Body
  • @Body는 HTTP POST req의 body에서 데이터를 추출하여 movieData 매개변수에 할당한다.

@Get, @Post, @Delete, @Patch

@Post

 @Post()
  create(@Body() movieData) {
    // @Body는  movieData안에 request의 body를 가져온다.(우리가 json형식으로 보내는 값 )
    return movieData;
  }
(alias) Post(path?: string | string[]): MethodDecorator
import Post
  • @Post안에 경로(path)를 지정하지 않았으면 메서드가 속한 컨트롤러의 기본 경로로 사용되고,이 경로로 POST 요청을 보낸다.

@Delete

 @Delete('/:id')
  remove(@Param('id') movieId: string) {
    return `${movieId}번 영화 삭제`;
  }
  • @Delete는 주어진 쿼리 파라미터의 값에 때라 삭제된다.

@Patch

@Patch(' /:id')
  patch(@Param('id') movieId: string, @Body() updateData) {
    return {
      updateMovie: movieId, // 업데이트 할 movie id와 우리가 보낼 데이터 객체를 리턴
      ...updateData,
    };
  }

  /* Patch에서 리턴된 값
  {
  "updateMovie": "12",
  "name": "파묘",
  "director": "장재현"
  }
  */
  • 위의 예제에서 @Patch('/:id')는 주어진 id에 해당하는 영화를 찾아서, movieId에 할당하고, 해당 영화의 정보를 업데이트하기 위해 req의 body에서 데이터를 추출한다.
    이 데이터를 updateData에 할당한다. 업데이트된 영화의 id와 함께 업데이트된 데이터를 반환하게 된다.
profile
미래의 나를 위한 기록

0개의 댓글