4. Controller
HTTP 엔드포인트를 정의
Ex) http://localhost:8080/posts
NestJS에서 제공하는 Decorator로 분기
요청이 어디로 라우팅 될 지 결정
Path parameter와 body로 전달 된 데이터 검증
Guard와 Pipe 라이프사이클을 처리 (optional)
요청이 검증되면 service를 호출
Nest cli로 controller생성 시 자동으로 service를
Dependency Injection을 해줌
5. 어떻게 자동으로 DI를 해주냐 (Module)
module에 providers에 리스트로
주입 받을 클래스를 작성해줌
NestJS cli로 생성 시 자동으로 해줌
service에 Injectable decorator를 작성
module에서 providers에 등록 할 수 있게
IOC container (Inversion of control)
8. Pipe 사용 예제
parameter의 id값은 number 값임
get요청 시 url의 id값은 string값임
pipe에서 number 타입으로 transform
pipe를 통과하지 못할 시 exception을 던짐
Type 관리가 굉장히 편해짐
9. Custom Pipe
Custom pipe를 만들 때 pipeTransform
Implements 해서 생성 해줘야 됨
transform의 value값이 parameter로
전달된 value 값에 따라 자유롭게 처리 가능
Injectable decorator 작성 해줘야 됨
10. Guards
Return type의 Promise<boolean> 값이
Guard를 통과 여부를 결정함
CanActivate 인터페이스로 구현
canActivate 함수의 context에 request가 담김
http : switchToHttp()
web socket : switchToWs()
rpc: switchToRpc()
11. DTO (data transfer object)
잘못된 데이터에 대한 명확한 에러 메세지를
전달하고 싶을 때
Body에 담긴 데이터가 엄청 많을 때?
Request에 전달 된 데이터 검증이 필요할 때
12. DTO (data transfer object)
yarn add class-validator
yarn add class-transformer
https://github.com/typestack/class-validator?
tab=readme-ov-
fi
le#validation-decorators
@IsString() decorator에 다른 타입의 값이
전달되면 exception을 던짐
exception에 명확한 에러 메세지를 전달 할 수 있음