[Nest.js] Controller(1)

์ง€๋‚˜๊ฐ€๋‹คยท2023๋…„ 3์›” 26์ผ
0

๐Ÿ“– ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ Controller ์ •๋ฆฌํ•˜๊ธฐ(1)


Controller

์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• ์ด๋‹ค.

์ปจํŠธ๋กค๋Ÿฌ์˜ ๋ชฉ์ ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ํŠน์ • ์š”์ฒญ์„ ์ˆ˜์‹ ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ ๋ผ์ดํŒ… ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ ์–ด๋–ค ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์–ด๋–ค ์š”์ฒญ์„ ์ˆ˜์‹ ํ• ์ง€ ์ œ์–ดํ•œ๋‹ค. ๊ฐ ์ปจํŠธ๋กค๋Ÿฌ์—๋Š” ๋‘˜ ์ด์ƒ์˜ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ, ๊ฒฝ๋กœ๋งˆ๋‹ค ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ๋ณธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํด๋ž˜์Šค์™€ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋Š” ํด๋ž˜์Šค๋ฅผ ํ•„์ˆ˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ์—ฐ๊ฒฐํ•˜๊ณ  Nest๊ฐ€ ๋ผ์šฐํŒ… ๋งต์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. (์š”์ฒญ์„ ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ์— ์—ฐ๊ฒฐ)


Routing

  • controller() ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์— 'cats'๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด prefix๋กœ ๋ถ™์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ 'cats'๋ฅผ ์‰ฝ๊ฒŒ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ๋ฐ˜๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • @Get() HTTP ์š”์ฒญ ๋ฉ”์„œ๋“œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Nest๊ฐ€ HTTP ์š”์ฒญ์— ๋Œ€ํ•œ ํŠน์ • ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ์ง€์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.
import { Controller, Get } from '@nestjs/common';

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

CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

yarn g controller cats

Request object

  • nest๋Š” ๊ธฐ๋ณธ ํ”Œ๋žซํผ(Express)์˜ ์š”์ฒญ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ @Req() ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ nest ์š”์ฒญ ๊ฐ์ฒด์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค.
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';
  }
}

์ผ๋ฐ˜์ ์œผ๋กœ๋Š” NestJS์—์„œ ์ œ๊ณตํ•˜๋Š” @Body(), @Query() ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€๋งŒ ์•„๋ž˜์™€ ๊ฐ™์€ Decorator๋“ค์„ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์‚ฌ์šฉ
@Request(), @Req() req
@Response(), @Res()* res
@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

์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉด ์ปค์Šคํ…€ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.


Status code

  • ์‘๋‹ต ์ƒํƒœ ์ฝ”๋“œ๋Š” 201์ธ POST ์š”์ฒญ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๊ธฐ๋ณธ ๊ฐ’์€ 200์ด๋ฉฐ @HttpCode(...) ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ๋ฅผ ์„ ์–ธํ•˜์—ฌ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
@Post()
@HttpCode(204)
create() {
  return 'This action adds a new cat';
}

  • ์‚ฌ์šฉ์ž ์ง€์ • ์‘๋‹ต ํ—ค๋”๋ฅผ ์ง€์ •ํ•˜๋ ค๋ฉด @Header() ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ณ„ ์‘๋‹ต ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ res.header()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.
@Post()
@Header('Cache-Control', 'none')
create() {
  return 'This action adds a new cat';
}

์ฐธ๊ณ  ์ž๋ฃŒ

profile
๊ทธ ๊ผฌ๋ผ์ง€๋กœ ์–ธ์ œ๊นŒ์ง€ ์‚ด ๊ฑฐ๋ƒ๊ณ 

0๊ฐœ์˜ ๋Œ“๊ธ€