-
[Nest.js 공식문서 읽기] ControllerServer/Nest.js 2023. 1. 27. 14:57
컨트롤러
컨트롤러는 애플리케이션에 대한 특정 요청을 받고 응답을 리턴하는 곳이다.
라우팅
express에서는 라우터와 컨트롤러를 분리했었는데, nest는 express의 라우터와 컨트롤러를 합쳐놓은 모습이었다.
nest에서는 express에서 사용하지 않던 데코레이터라는 것을 사용한다.
📌 데코레이터
데코레이터는 클래스의 필수 메타데이터를 등록하고 nest가 라우팅 맵을 생성할 수 있도록 한다.
Nest에서 제공하는 데코레이터를 사용할 경우 자체적으로 인스턴스를 생성해준다.
- Nest에서는 불필요한 메모리 사용을 방지하기 위하여 싱글톤 패턴을 적용시킬 수 있는 데코레이터를 제공한다.
- @Resolver(for GraphQL), @Controller(), @injectable() 등, 해당하는 것을 모듈의 프로바이더에 넣는 것으로 싱글톤이 적용된다.@Controller() 데코레이터에 라우트 경로의 대분기(prefix)를 넣고 소분기 경로를 각 메소드 데코레이터(@Get 같은)의 인자로 넣어주면 된다.
CLI를 사용하여 컨트롤러를 만들어주게 되면 데코레이터 안에 컨트롤러의 이름으로 대분기 라우팅의 경로가 자동삽입된다.
// boards.controller.ts import { BoardsService } from './boards.service'; import { Controller, Get } from '@nestjs/common'; import { Board } from './board.entity'; @Controller('boards') export class BoardsController { constructor(private boardsService: BoardsService) {} @Get('/') getAllBoard(): Promise<Board[]> { return this.boardsService.getAllBoards(); } }
nest에서 응답을 처리하는 방식에는 2가지가 있다. (standard 방식이 권장 됨)
- Standard : 내장 메서드를 사용하면 요청 핸들러가 JS 객체나 배열을 반환할 때 자동으로 JSON으로 직렬화되고, 원시 타입(문자열, 숫자, 불리언 값)을 반환할 때는 직렬화 하지 않고 값을 그대로 리턴한다. 그 값을 리턴하면 그 뒤는 nest가 알아서 처리해준다. 더욱이 응답 상태코드는 기본값 200으로 되어있다.(post메소드는 201이다) 상태코드를 수정하고 싶다면 @HttpCode() 데코레이터로 수정해줄 수 있다.
- Library-specific : 라이브러리의 응답 객체를 사용하는 방법도 있다. express 같은 경우 @Res() 데코레이터를 메서드 핸들러의 시그니처에 주입하는 것이다.
'Server > Nest.js' 카테고리의 다른 글
[Nest.js] 로컬에서 https 서버 구동하고 postman으로 테스트 하기 (0) 2023.04.04 효율적인 API 문서 관리를 위한 Swagger 도입 (0) 2023.03.10 [Nest.js 공식문서 읽기] Middleware (0) 2023.01.27 [Nest.js 공식문서 읽기] Provider (0) 2023.01.27 [Nest.js 공식문서 읽기] Module (0) 2023.01.27