NestJS week 1
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
데커레이터로 주입
- 먼저 매개변수가 여러 개 전달될 경우 객체로 한 번에 받는 방법
- 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로 배우는 백엔드 프로그래밍