컨트롤러는 서버로 들어오는 request를 처리하고 그에 맞는 response를 응답합니다
메타데이터
를 설정할 수 있는 데코레이터에 대해 알아봅니다.라우팅
에 대해 알아봅니다.nestjs에서 컨트롤러를 만드려면 class
와 decorator
를 사용합니다. decorator는 class와 메타데이터를 연결하고 라우팅을 가능하게 합니다.
import { Controller } from '@nestjs/common';
@Controller('')
export class Controller {
}
@
기호로 컨트롤러 데코레이터를 선언합니다.컨트롤러는 라우팅을 통해 서버로 들어오는 request를 처리합니다.
라우트 경로를 설정하기 위해@Controller(path)
컨트롤러 데코레이터 안에 경로를 설정합니다.
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
}
@Controller('cats')
컨트롤러는 /cats
경로로 들어오는 request를 처리합니다.HTTP request method 중 GET
메서드를 처리하기 위해서는 @Get()
데코레이터를 사용합니다.
import { Controller, Get } from '@nestjs/common';
@Controller('cats')
export class CatsController {
@Get()
findAll(): string {
return 'This action returns all cats';
}
}
GET /cats
요청이 오면 findAll()
핸들러가 처리하게 됩니다.GET /cats/all
경로를 설정해주고 싶다면 @Get('all')
을 해주면 됩니다.@Get()
@Post()
@Put()
등이 있습니다.위 코드에서 GET /cats
요청을 처리하는 handler인 findAll()
request handler를 정의했습니다.
nestjs에서 request handler는 다음과 같은 특성을 가집니다.
object
또는 array
라면 자동으로 JSON으로 변환하여 응답하게
됩니다.Primitive
값이라면 값 그 자체를 반환하게 됩니다. 서버에서 응답을 처리하기 위해서 request의 정보를 알아야할 때가 있습니다. 이때 request object
를 사용합니다. request object를 사용하기 위해서는 @Req
데코레이터가 필요합니다.
import { Controller, Get, Req } from '@nestjs/common';
import { Request } from 'express';
@Controller('cats')
export class CatsController {
@Get()
findAll(@Req() request: Request): string {
return 'This action returns all cats';
}
}
응답을 처리하는 response의 기본 상태 코드는 200
입니다. (POST
요청에 대한 상태코드는 201
입니다)
@HttpCode()
데코레이터를 추가하여 Status Cod
를 바꿀 수 있습니다.
import {HttpCode} from '@nestjs/common'
@Post()
@HttpCode(204) // 204 상태코드를 응답합니다
create() {
return 'This action adds a new cat';
}
Header
를 커스텀하여 응답하기 위해서는 @Header()
데코레이터를 사용합니다.
import {Header} from "@nestjs/common"
@Post()
@Header('Cache-Control', 'none')
create() {
return 'This action adds a new cat';
}
요청에 대해 redirect 하기 위해서는 @Redirect()
데코레이터를 사용하거나 response object
의 redirect()
메서드를 사용합니다.
@Get()
@Redirect('https://nestjs.com', 301)
findAll(){
return ...
}
@Redirect(url,statusCode)
데코레이터는 redirect할 url
과 statusCode
가 필요합니다.statusCode
를 지정하지 않는 경우 기본값은 302
상태코드로 응답됩니다.만약 동적으로 변하는 url
또는 statusCode
를 반환하고 싶다면 request handler가 다음 객체형태를 반환하도록 합니다.
{
"url" : redirection URL,
"statusCode" : statusCode
}
request handler가 위 객체를 반환하면 이미 선언된 @Redirect()
를 오버라이드해서 값을 리턴합니다.
@Get('docs')
@Redirect('https://docs.nestjs.com', 302)
getDocs(@Query('version') version) {
if (version && version === '5') {
return {
url: 'https://docs.nestjs.com/v5/',
statusCode : 301
};
}
}
Query
version을 확인해 조건을 만족하면 @Redirct
를 오버라이드해서 반환합니다.