Guide/NestJS

NestJS 개요-컨트롤러.Request 객체

Paeng 2020. 11. 9. 08:16
728x90

NestJS 개요-컨트롤러.Request 객체

NestJS

컨트롤러

컨트롤러는 들어오는 요청을 처리하고 클라이언트에 응답합니다.

image

컨트롤러의 목적은 애플리케이션에 대한 특정 요청을 수신하는 것입니다. 라우팅 컨트롤러는 어떤 컨트롤러가 어떠한 요청을 받는지에 대해 제어합니다. 컨트롤러에 둘 이상의 경로가 있을 수 있으며, 서로 다른 작업을 수행하도록 할 수 있습니다.

컨트롤러를 생성하기 위해 클래스와 데코레이터를 사용합니다. 데코레이터는 요청을 컨트롤러에 연결하여 Nest가 라우팅 맵을 만들 수 있도록 합니다.

Request 객체

핸들러는 종종 클라이언트의 request 요청 사항에 접근해야 합니다. Nest는 핸들러의 서명에 @Req() 데코레이터를 추가하여 request object에 대해 액세스할 수 있습니다(기본적으로 Express를 사용).

// cats.controller.ts

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';
  }
}

HINT
위 예제의 Request 타입과 같이 Express의 타입을 활용하려면 @types/express 패키지를 추가해주세요.

request 객체는 HTTP 요청을 나타내며, request query string, HTTP header, body 등이 포함됩니다. 이러한 속성은 @Body() 또는 @Query() 데코레이터를 사용하여 가져올 수 있습니다. 아래는 제공된 데코레이터와 이들이 나타내는 일반 플랫폼 별 객체 목록입니다.

@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

기본 HTTP 플랫폼(Ex. Express, Fastify) 입력과의 호환성을 위해 Nest는 @Res()Response() 데코레이터를 제공합니다. @Res()는 단순히 @Response()의 별칭이며, 기본 네이티브 플랫폼 response 객체 인터페이스를 노출하며, 이를 사용할 때 기본 라이브러리의 타입을 활용할 수 있습니다.

메소드 핸들러에 @Res() 또는 @Response() 데코레이터를 사용하면 해당 핸들러에 Library-specific 모드로 설정하고 응답을 관리하게 됩니다. 이 경우, 응답 객체에 대해 res.json() 또는 res.send()를 호출하여 응답을 발행해야 하는데, 그렇게 하지 않을시 HTTP 서버가 중단됩니다.

HINT
커스텀 데코레이터를 만드는 것에 관심이 있다면, NestJS Custom route decorators를 참고해주세요.


NestJS 공식 문서 번역에 대한 다른 글도 보고 싶으시다면 아래 글을 확인해주세요.
[Node/NestJS] - NestJS 공식 문서 번역 모아보기

728x90
728x90