2023. 6. 18. 04:01ㆍ카테고리 없음
목차 |
1. Nest 컨트롤러 |
2. 라우팅 방법 |
3. HTTP 요청 처리방법 |
4. 기타 |
1. Nest 컨트롤러
Nest의 에서 컨트롤러는 클라이언트로부터 들어오는 요청을 처리하고 응답을 보내주는 역할을 한다.
Nest 컨트롤러는 라우터의 역할과 컨트롤러(HTTP 요청 처리)의 역할을 같이 한다.
그럼 라우팅 방법과 HTTP 요청을 처리하는 방법에 대해서 알아보자.
2. 라우팅 방법
Nest에서 Contoller가 라우팅역할을 한다.
우리는 어떻게 이것을 사용하는지만 알면된다.
라우팅을 사용하는 방법에 대해서 살펴보자.
import { Controller, Get } from '@nestjs/common';
@Controller('routing')
export class CatsController {
@Get()
hello(): string {
return 'Hello Router';
}
}
이렇게 사용하면 localhost:3000/routing 으로 요청을 보냈을 경우 "Hello Router"라는 응답이 오게된다.
@Controller 앞에 붙어 있는 @는 데코레이터임을 알려준다.
데코레이터란, 클래스나 함수위에 써주면 아래의 클래스 혹은 함수의 동작이 한번 바뀌게 하는 것을 말한다.
위와 같이 @Controller의 인자값에 값을 넣어주면 "/인자" 에 대한 요청을 전부 받게된다.
이 안에 @Get, @Post 등과 같이 메서드 데코레이터의 인자에 값을 넣어주면 중첩 라우팅이 되게 된다.
(단, @Get의 인자값에 넣었으므로 get 메서드로 요청했을 경우에 라우팅이 된다.)
예시를 한번 살펴보자.
import { Controller, Get } from '@nestjs/common';
@Controller('routing')
export class AppController {
@Get()
helloRouter(): string {
return "Hello Router";
}
@Get('example')
helloRouter2(): string {
return "Hello Router2";
}
}
아래와 같이 응답이 오는것을 확인할 수 있다.
3. HTTP 요청 처리방법
Nest를 사용하기 이전에는 request 메시지를 받아서 처리해왔다.
getHello(req, res, next) {
console.log(req) // req 에 대한 내용
}
하지만 Nest에서는 데코레이터를 이용해서 좀더 간편하게 처리가 가능하다.
import { Controller, Get, Req } from '@nestjs/common';
import { Request } from 'express';
@Controller()
export class AppController {
@Get()
getHello(@Req() request: Request): string {
console.log(request) // 요청 메시지 내용
return '';
}
}
기본적으로 request 메시지도 받을 수 있고,
다음과 같이 요청 메시지의 바디 부분을 처리해서 받을 수 있다.
import { Body, Controller, Get } from '@nestjs/common';
@Controller()
export class AppController {
@Get()
helloRouter(@Body() example: string): string {
return example;
}
}
위의 코드는 요청 메시지를 받아서 그대로 반환한다.
(일반적으로는 Get메서드에 Body를 넣어서 주지는 않는다.)
Nest 에서는 요청 메시지에 대한 여러가지 데코레이터를 제공한다.
데코레이터(요청메시지) | 의미 |
@Request, @Req | request |
@Response, @Res | response |
@Next | next |
@Session | req.session |
@Param(key?: string) | req.params / req.params[key] |
@Body(key?: string) | req.body / req.body[key] |
@Query(key?: string) | req.query / req.query[key] |
@Headers(name?: string) | req.headers / req.headers[name] |
@Ip() | req.ip |
@HostParam() | req.hosts |
Nest에서 제공하는 데코레이터 외에도 개발자가 커스텀해서 만들어 사용할 수 있다.
4. 기타
요청 메시지 메서드
Nest는 기본적인 Http 요청 메서드를 데코레이터로 지원한다.
데코레이터(요청 메서드) | 의미 |
@Get() | HTTP 요청 메시지의 Get 메서드를 처리한다. |
@Post() | HTTP 요청 메시지의 Post 메서드를 처리한다. |
@Put() | HTTP 요청 메시지의 Put 메서드를 처리한다. |
@Delete() | HTTP 요청 메시지의 Delete 메서드를 처리한다. |
@Patch() | HTTP 요청 메시지의 Patch 메서드를 처리한다. |
@Options() | HTTP 요청 메시지의 Options 메서드를 처리한다. |
@Head() | HTTP 요청 메시지의 Head 메서드를 처리한다. |
@All() | HTTP 요청 메시지의 모든 메서드를 처리한다. |
경로 와일드 카드
라우팅 시 패턴기반의 경로도 사용할 수 있다.
@Get('ab*cd')
findAll() {
return 'This route uses a wildcard';
}
상태 코드
응답메시지에 상태코드를 지정해서 응답해줄 수 있다.
(Nest의 상태코드는 기본적으로 Post는 201 나머지는 200으로 처리한다.)
@Post()
@HttpCode(204)
create() {
return 'Status Code 204';
}
헤더
응답메시지의 헤더를 지정할 수 있다.
(Key: Value 형식으로 응답을 준다.)
@Get()
@Header('Example', 'char1ey')
create() {
return 'header:: example char1ey';
}
리다이렉트
다른 URL로 보내는 리다이렉트 기능을 할 수 있다.
@Get()
@Redirect('https://localhost:3000/char1ey', 301)
이 외에도 공식문서에는 여러 기능들을 명시하고 있다.
https://docs.nestjs.com/controllers
Documentation | NestJS - A progressive Node.js framework
Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Programming), FP (Functional Programming), and FRP (Functional Rea
docs.nestjs.com