728x90
반응형

컨트롤러는 들어오는 request를 처리하고 response를 클라이언트에게 반환하는 역할을 한다.

 

예제를 살펴보면, 

 

cats.controller.ts

import { Controller, Get } from '@nestjs/common';

@Controller('cats') //경로
export class CatsController {
  @Get()
  findAll(): string {
    return 'This action returns all cats';
  }
}

 

컨트롤러를 정의하는 데 필수인 @Controller() 안에 선택적 라우트 경로(path) 접두사인 cats를 지정한다.

이렇게 지정을 해두면 /cats로 들어오는 요청들을 컨트롤 할 수 있다.

 

CLI를 사용하여 컨트롤러를 만들려면 
$ nest g controller cats
 명령을 실행하면 됩니다.

 

findAll() 메서드 앞에 있는 @Get() HTTP 요청 메서드 데코레이터는 Nest에 HTTP 요청에 대한 특정 엔드포인트에 대한 핸들러를 생성하도록 지시한다. 

 

예를 들어 @Get('profile')과 결합된 constomer의 경로 접두사는  GET /customers/profile 과 같은 요청에 대한 라우트 매핑을

생성한다.

 

메소드 핸들러 시그니처(예: findAll(@Res() response))에서 @Res() 데코레이터를 사용하여 삽입할 수 있는 라이브러리별(예: Express) 응답객체를 사용할 수 있습니다. 예를 들어 Express에서는 response.status(200).send() 와 같은 코드를 사용하여 응답을 구성할 수 있습니다.

 

정리해보면,

  • /cats 로 요청을 받을 때 @Controller('cats') 로 지정해준다.
  • GET 메소드로 요청을 받을 때 @Get()을 선언해준다.
  • GET 메소드 하위경로를 지정해줄 땐 @Get() 안에 경로 이름을 지정해준다.
  • 기본적으로 지정된 라우터는 findAll()로 들어오게된다.
  • @Req() 데코레이터를 추가하면 요청객체에 액세스 할 수 있다.

 

 

다음으로 POST 핸들러를 만들어보자.

 

cats.controller.ts

import { Controller, Get, Post } from '@nestjs/common';

@Controller('cats')
export class CatsController {
  @Post()
  create(): string {
    return 'This action adds a new cat';
  }

  @Get()
  findAll(): string {
    return 'This action returns all cats';
  }
}

 

GET 메소드 요청 처리를 이해하면,  POST 핸들러는 아주 쉽게 이해할 수 있다.

@Get()@Post()@Put()@Delete()@Patch()@Options() 및 @Head(). 또한 @All()은 이들 모두를 처리하는 엔드 포인트를 정의한다.

 

 

Route wildcards

패턴 기반 라우트 또한 제공한다. 별표는 와일드카드로 사용되며 모든 문자조합과 일치한다.

@Get('ab*cd')
findAll() {
  return 'This route uses a wildcard';
}

 

 

Status code

201인 POST 요청을 제외하고 상태코드는 기본적으로 항상 200이다. @HttpCode() 데코레이션을 추가하여 변경할 수 있다.

@Post()
@HttpCode(204)
create() {
  return 'This action adds a new cat';
}
@nestjs/common 패키지에서 HttpCode를 가져옵니다.

 

Headers

커스텀 응답헤더를 지정하려면 @Header() 데코레이터를 이용한다. ( res.header()를 직접 호출 )

@Post()
@Header('Cache-Control', 'none')
create() {
  return 'This action adds a new cat';
}
@nestjs/common 패키지에서 Header를 가져옵니다.

 

 

Redirection

응답을 특정 URL로 리디렉션 하려면 @Redirect() 데코레이터를 이용한다. ( res.redirect()를 직접 호출)

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

 

그럼 이런식으로 반환하게 된다.

{
  "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/' };
  }
}

 

 

 

728x90
반응형

'Back-End > Nest.js' 카테고리의 다른 글

Nest.js | 개요 | Modules  (0) 2021.09.24
Nest.js | 개요 | Service  (0) 2021.09.24
Nest.js | 개요 | Controller(2)  (0) 2021.09.24
Nest.js | 개요 | 첫 번째 단계  (0) 2021.09.24
Next.js | 소개  (0) 2021.09.24

+ Recent posts