컨트롤러는 들어오는 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/' };
}
}
'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 |