NestJS week 1

Joo Hee Paige Kim
3 min readOct 17, 2023

2023.10.17

Nest의 controller

MVC 패턴의 컨트롤러(들어오는 요청 request을 받고 처리된 결과를 응답esponse으로 돌려주는 인터페이스 역할)

  • 기본 CRUD 보일러플레이트 생성 코드
nest g resource Users
  • dto(Data Transfer Object) - 데이터를 전송하거나 반환하는 데 사용되는 객체이며 데이터를 가공하고 변환하는 데 사용
export class CreateUserDto {   
readonly name: string;
readonly email: string;
readonly password: string;
}
  • entities — 데이터베이스 테이블과 일치하는 데이터 모델
  • controller — HTTP 엔드포인트(Endpoint)와 URL 경로를 정의하며, 클라이언트의 요청을 라우팅하여 해당 요청을 처리할 서비스 메서드로 전달
  • module — 관련된 기능 및 관련된 코드를 하나의 독립적인 단위로 그룹화하는 데 사용
  • service — 컨트롤러로부터 받은 요청을 처리하고 데이터베이스와 상호 작용하거나 다른 서비스와 협력하여 작업을 수행

라우트 매개변수

  • 전달받은 매개변수는 함수 인수에 @Param데커레이터로 주입
  1. 먼저 매개변수가 여러 개 전달될 경우 객체로 한 번에 받는 방법
  • params의 타입이 any가 되어 권장 X
  • 라우트 매개변수는 타입이 항상 string이기 때문에 명시적으로 { [key: string]: string } 타입을 지정
@Delete(':userld/memo/memold') 
deleteUserMemo(@Param() params: { [key: string]: string }) {
return 'userid: ${parains.userid}, memold: ${params.memold}';
}

2. 라우팅 매개변수를 따로 받기

@Delete(':userld/memo/:memold')  
deleteUserMemo( @Param('userid') userid: string,
@Param('memoId') memold: string,
){
return 'userId: ${userId}, memold: ${memold}';
}

하위 도메인 라우팅

  • 컨트롤러 생성
nest g co Api
  • @HostParam 데커레이터를 이용하면 서브 도메인을 변수로 받을 수 있음
  • API 버저닝 가능 → 하위 도메인 이용
@Controller({ host: ':version.api.localhost' })
export class ApiController {
@Get()
index(@HostParam('version') version: string): string {
return `Hello, API ${version}`;
}
}
$ curl http://v3.api.localhost:3000
Hello, API v3s

Reference: NestJS로 배우는 백엔드 프로그래밍

--

--