컨트롤러

2025. 12. 31. 20:30·NestJS/NestJS 자체 문서화

컨트롤러는 어떤 요청을 어떻게 처리하는지 관리하는 역할을 합니다.

컨트롤러 생성 방법

nest g controller 이름
nest g co 이름 # 약어 사용
nest g co 이름 --no-spec # 테스트 파일 생성을 원하지 않을 때

라우팅

요청 경로를 처리하기 위한 방법을 라우팅이라 합니다.
컨트롤러 자체의 경로와 메소드별 경로를 지정할 수 있습니다.
// 컨트롤러 수준의 라우팅
// http://url/index 패턴과 일치하면 해당 컨트롤러로 진입후 메서드를 찾습니다.
@Controller('index')
export class AppController {
  constructor(private readonly appService: AppService) {}
  
  //메서드 수준의 라우팅
  // http://url/index/hello
  // 'hello'라고 적어도 동일합니다
  @Get('/hello') 
  getHello() {
    return 'Hello!';
  }
  
  @Get() // http://url/index
  getIndex() {
  	return 'Index page';
  }
}

HTTP 메서드

NestJS는 모든 HTTP 메서드에 대한 데코레이터를 제공합니다.
데코레이터 기능
@Get(’라우팅') GET 메서드의 라우팅 설정
@Post(’라우팅') POST 메서드의 라우팅 설정
@Delete(’라우팅') DELETE 메서드의 라우팅 설정
@Put(’라우팅’) PUT 메서드의 라우팅 설정
@Patch(’라우팅’) PATCH 메서드의 라우팅 설정
@Options(’라우팅') OPTIONS 메서드의 라우팅 설정
@Head(’라우팅’) HEAD 메서드의 라우팅 설정
@All(’라우팅’) HTTP 메서드를 모두 처리

Request 객체

데코레이터를 사용해 HTTP 요청 시 전달되는 요청 객체를 다룰 수 있습니다.
데코레이터 기능
@Req(), @Request() request 객체
@Res(), @Response() response 객체
@Next() 다음 미들웨어 사용(NestJS에서 쓸 일 없을 것 같아요)
@Session() request 객체의 session 속성
@Param(key?: string) request 객체의 param 속성
@Body(key?: string) request 객체의 body 속성 (주로 Post, Put, Patch 메서드)
@Query(key?: string) request 객체의 query 속성
@Headers(name?: string) request 객체의 headers 속성
@Ip() request 객체의 ip 속성

쿼리, 경로 매개변수

@Param() 데코레이터를 이용해 경로 매개변수를 처리하고,
@Query() 데코레이터를 이용해 쿼리 매개변수를 처리합니다.

예시

http://www.google.com/search?q=nestjs 에서 경로와 쿼리는 다음과 같습니다.
www.google.com search q=nestjs
host 경로(Path) 쿼리
@Get(':id')
find(
  @Param() params,
  @Param('id') id,
  @Query() queries,
  @Query('q') keyword,
) {
  // @Param() 데코레이터에 문자열을 전달하지 않으면 모든 param 객체를 전달 받습니다.
  // @Param() 데코레이터에 문자열을 전달하면 인자와 일치하는 param 객체의 값을 string으로 전달 받습니다.
  const isParamEqual = params.id === id;
  
  // @Query() 데코레이터에 문자열을 전달하지 않으면 모든 query 객체를 전달 받습니다.
  // @Query() 데코레이터에 문자열을 전달하면 인자와 일치하는 query 객체의 값을 string으로 전달 받습니다.
  const isQueryEqual = queries.q === keyword;
}

동적 매개변수

@Get(':id')
findOne(@Param() params: any): string {
  console.log(params.id);
  return `This action returns a #${params.id} cat`;
}

요청 본문(Body, payload(본문을 payload라고도 함)) 다루기

HTTP 요청 시 요청 본문(Body)에 처리에 필요한 데이터를 전달할 수 있습니다.
요청 본문은 @Body() 데코레이터를 이용해 처리합니다.
@Post()
async createB(@Body() body, @Body('name') name, @Body('age') age) {
  console.log(body); // body 전체 출력
  console.log(name); // body.name 출력
  console.log(age); // body.age 출력
}

응답 상태 코드 변경

NestJS의 기본 응답 상태 코드는 200이고 POST 요청은 201입니다.
@HttpCode() 데코레이터를 사용해 변경할 수 있습니다.
@Post()
@HttpCode(204)
create() {
  return 'This action adds a new cat';
}

응답 헤더 변경

@Post()
@Header('Cache-Control', 'no-store')
create() {
  return 'This action adds a new cat';
}

리디렉션

응답을 특정 URL로 리디렉션 하려면 @Redirect() 데코레이터 혹은 url을 반환하면 됩니다.
둘 다 반환하는 경우 url 반환이 우선순위가 더 높습니다.
@Get('docs')
@Redirect('https://docs.nestjs.com', 302) // 우선순위가 낮습니다.
getDocs(@Query('version') version) {
  if (version && version === '5') {
    return { url: 'https://docs.nestjs.com/v5/' }; // 우선순위가 높습니다.
  }
}
 
저작자표시 (새창열림)

'NestJS > NestJS 자체 문서화' 카테고리의 다른 글

파이프(Pipe), DTO  (0) 2025.12.31
프로바이더, 서비스  (0) 2025.12.31
모듈  (0) 2025.12.31
Nest CLI  (1) 2025.12.18
NestJS 개요  (0) 2025.12.10
'NestJS/NestJS 자체 문서화' 카테고리의 다른 글
  • 파이프(Pipe), DTO
  • 프로바이더, 서비스
  • 모듈
  • Nest CLI
남느
남느
  • 남느
    요약 장인
    남느
  • 전체
    오늘
    어제
    • 분류 전체보기 (73)
      • 프로그래밍 (18)
      • 웹 기초 지식 (2)
      • Node.js 기초 (2)
      • 코딩테스트(자바스크립트) (6)
      • NestJS (18)
        • NestJS 자체 문서화 (11)
        • NestJS 예제 (5)
        • NestJS 레시피 (2)
      • Node.js ORM (5)
        • TypeORM (4)
      • 자바 (1)
      • 우분투 적응기 (8)
      • 리눅스 답은 하모니카다 (4)
      • 살다보니 드는 생각들 (3)
      • 도커 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백엔드
    취업
    프로그래머
    웹
    개발자
    신입
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
남느
컨트롤러
상단으로

티스토리툴바