관리 메뉴

즐겁게, 코드

컨트롤러의 데코레이터 본문

💻 백엔드/Nest.js

컨트롤러의 데코레이터

Chamming2 2021. 11. 10. 00:48

API의 엔드포인트를 관리하는 컨트롤러는 URL에 주어지는 파라미터를 어떻게 처리할까요?

@Get()
getUserById () {
    // 어떻게 파라미터에서 유저 아이디를 추출할 수 있을까요?
    return `returned user: ${userId}`
}

Nest.js는 데코레이터 문법을 적극적으로 활용하는데요, 오늘은 컨트롤러가 URL에서 데이터를 추출할 때 사용하는 데코레이터를 살펴보도록 하겠습니다.

@Param 데코레이터

@Param 은 URL의 파라미터를 추출하기 위한 데코레이터입니다.

@Get(":파라미터명")
getUserById(@Param("파라미터명") userId) {
    return `returned user: ${userId}`
}

@Get(), @Post() 등 HTTP 요청 메서드의 데코레이터에는 : 을 포함한 파라미터의 이름을 전달하고, @Param() 데코레이터의 인자로는 메서드 데코레이터에 전달했던 파라미터 이름과 동일한 이름을 전달합니다.

// "파라미터명" 에 들어갈 값은 반드시 동일해야 합니다!
@Get(":파라미터명")
getUserById(@Param("파라미터명") id)

그럼 @Param() 데코레이터는 자동으로 URL에서 해당 파라미터를 추출하고, 파라미터의 값을 함수의 인자로 전달할 수 있게 됩니다.

유저 아이디를 파라미터로 전달해 이를 응답에 사용한 모습입니다.

@Body 데코레이터

@Body 는 요청 본문을 획득하기 위한 데코레이터입니다.

@Post()
createUser(@Body() userData) {
    const { id, name } = userData;
    userList.push({ id, name });
    return userList;
}

주로 Post, Patch 등 요청 본문을 사용하는 요청이 들어올 때, @Body 는 요청 본문을 추출해주는 역할을 합니다.

@Body 데코레이터를 사용할 때 주의할 점으로는 기본적으로 JSON 포맷으로 들어오는 요청 본문에 대해서만 추출이 가능하기 때문에, 이외의 타입을 전달받으면 빈 객체로 처리하게 된다는 점에 유의해야 합니다.

@Get, @Post, @Patch... 중 @Post 만이 201번 상태를 반환합니다.

@Query 데코레이터

@Query는 쿼리스트링을 추출하기 위한 데코레이터입니다.

@Get("경로명")
searchUser(@Query("쿼리명") username) {
    const resultString = username ? `User ${username} found!` : `Invalid name.`;
    return resultString;
}

앞서 배운 @Param 데코레이터와 유사하나, @Query는 URL 중 ? 문자로 구분되는 쿼리스트링의 쿼리명과 값을 추출합니다.

이 때, 만약 주어진 쿼리명을 찾지 못한다면 undefined를 반환하게 됩니다.

반응형

'💻 백엔드 > Nest.js' 카테고리의 다른 글

Nest.js 시작하기 : 설치 & 아키텍처 소개  (0) 2021.10.29
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆