[NestJS] Controller(4) - Redirection, Route parameters

cabbage·2023년 4월 21일
0

NestJS

목록 보기
7/17
post-thumbnail

NestJS 공식문서의 Controller 개념 공부 4번째 포스트로, Controller의 Redirection, Route parameters 주제로 작성한다.

Redirection

특정 URL로 응답을 리다이렉션하려면, @Redirect() 데코레이터를 사용하는 방법이나 라이브러리-특정 응답 객체를 사용해 res.redirect()를 직접 호출하는 방법을 사용할 수 있다.

@Redirect()url, statusCode 두 개의 아규먼트를 받는다. 두 아규먼트 모두 선택적(optional)이다. statusCode의 디폴트 값은 302이다.

@Get()
@Redirect('https://nestjs.com', 301)

HTTP 상태 코드 또는 리다이렉트 URL을 동적으로 결정하고 싶은 경우, 아래와 같은 형태의 객체를 라우트 핸들러 메서드가 반환하게 하면 된다.

{
  "url": string,
  "statusCode": number
}

반환 값은 @Redirect() 데코레이터에 전달되는 아규먼트를 덮어쓰게 된다. 예를 들어 아래와 같다.

@Get('docs')
@Redirect('https://docs.nestjs.com', 302)
getDocs(@Query('version') version) {
  if (version && version === '5') {
    return { url: 'https://docs.nestjs.com/v5/' };
  }
}

Route parameters

요청의 일부에 동적 데이터를 사용해야 하는 경우, 정적 경로를 갖는 라우트는 동작하지 않는다. 예를 들어, id 1을 갖는 고양이를 가져오기 위한 GET /cats/1가 있다. 파라미터를 갖는 라우트를 정의하려면, 동적으로 변경되는 요청 URL 경로에서 동적 값을 캡쳐할 수 있도록 라우트의 경로에 라우트 파라미터 토큰을 추가할 수 있다.

아래 예제에서 @Get() 데코레이터 내부에서 라우트 파라미터 토큰을 사용한다. 이 방식으로 선언된 라우트 파라미터는 @Param() 데코레이터를 사용해 접근할 수 있다. @Param() 데코레이터는 메서드 정의에 추가되어야 한다.

파라미터를 갖는 라우트는 모든 정적 경로 다음에 선언되어야 한다. 그래야 파라미터를 갖는 경로가 정적 경로로 향하는 트래픽을 가로채는 것을 방지할 수 있다.

@Get(':id')
findOne(@Param() params): string {
  console.log(params.id);
  return `This action returns a #${param.id} cat`;
}

@Param() 데코레이터는 메서드 파라미터를 데코레이팅하기 위해 사용된다. 이 데코레이터는 라우트 파라미터를 데코레이트된 메서드 파라미터의 프로퍼티로 메서드 내부에서 사용할 수 있게 해준다.

위 코드를 보면, params.idid 파라미터에 접근할 수 있다. @Param 데코레이터에 특정 파라미터 토큰을 전달할 수도 있다. 그러면 아래 예제와 같이 메서드 내부에서 토큰을 사용해 직접 라우트 파라미터를 참조할 수 있다.

@Get(':id')
findOne(@Param('id') id: string): string {
  return `This action returns a #${id} cat`;
}

참고

profile
캐비지 개발 블로그입니다. :)

0개의 댓글