[NestJS] Controller(2) - Request object

cabbage·2023년 4월 18일
0

NestJS

목록 보기
5/17
post-thumbnail

NestJS 공식문서의 Controller 개념 공부 2번째 포스트로, Controller의 Request object를 주제로 작성한다.

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

요청 객체는 HTTP 요청을 나타내고 '요청 쿼리 스트링', '파라미터', 'HTTP 헤더', '바디' 등과 같은 프로퍼티를 갖는다. 대부분의 경우, 이런 프로퍼티들을 수동으로 잡아낼 필요는 없다. 대신 바로 사용할 수 있는 @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 플랫폼(Express와 Fastify) 간 타입 호환성을 위해, Nest는 @Res()@Response() 데코레이터를 제공한다. @Res()@Response()를 다르게 표현한 것이다. 두 데코레이터 모두 기본 플랫폼 response 객체 인터페이스를 노출시킨다. 두 데코레이터를 최대한 활용하려면 기본 라이브러리(@types/express)에 대한 타입도 임포트해야 한다.

메서드 핸들러에 @Res() 또는 @Response()를 주입하는 경우 해당 핸들러에 대해 Nest를 라이브러리-특정 모드로 설정하게 되므로 해당 핸들러의 응답을 직접 관리해야 한다. 핸들러의 응답을 직접 관리하는 경우, res.json() 또는 res.send()와 같이 response 객체를 호출해 응답을 돌려주어야 한다. 그렇지 않으면 HTTP 서버가 중단된다.

참고

profile
캐비지 개발 블로그입니다. :)

0개의 댓글