Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 딥러닝
- 모두의 네트워크
- 데베
- 자바
- 리액트 네이티브 시작하기
- 모두의네트워크
- React Native
- 깃허브 토큰 인증
- 모두를위한딥러닝
- 리액트 네이티브
- 백준 4949번
- HTTP
- 정리
- 깃 터미널 연동
- 깃허브 로그인
- SQL
- 백준 4358번
- 백준 5525번
- 지네릭스
- 문자열
- 리액트 네이티브 프로젝트 생성
- 팀플회고
- 깃 연동
- 머신러닝
- 데이터베이스
- 네트워크
- 백준 4358 자바
- 백준
- 모두를 위한 딥러닝
- 스터디
Archives
- Today
- Total
솜이의 데브로그
[NestJS] 기본 개념 본문
컨트롤러
- 서버가 수행해야하는 작업을 데코레이터로 기술하여, 어플리케이션이 가지는 핵심 로직에 집중할 수 있도록 도와준다.
- @Controller 데코레이터를 클래스에 달면 해당 클래스는 컨트롤러의 역할을 하게 된다.
- @Get() 을 통해 들어오는 요청을 경로에 따라 관리 가능하다.
- ex) @Get('/hello') 라고 하는 경우, /hello 경로로 들어오는 요청을 처리
- @Contoller 데코레이터도 인자를 넣어 라우팅 경로의 prefix를 지정할 수 있다.
- 라우팅 패스는 와일드 카드를 이용하여 작성할 수 있다.
요청 객체 (Request Object)
- Nest는 요청과 함께 전달되는 데이터를 핸들러가 다룰 수 있는 객체로 변환한다.
- 변환된 객체는 @Req() 데코레이터를 이용해 다룰 수 있다.
Nest는 CRUD에 대한 http method의 성공에 대한 응답으로 POST는 201, 그 외에는 200을 갖는다.
상태코드를 다른 코드를 바꾸기 위해서는 다음과 같이 적용할 수 있다.
import { HttpCode } from '@nestjs/common';
@HttpCode(202)
@Patch(':id')
update(@Param('id') id: string, @Body() updateUserDto: UpdateUserDto) {
return this.usersService.update(+id, updateUserDto);
}
요청을 처리하는 도중 에러가 발생하거나 예외를 던져야 하는 경우 다음과 같이 할 수 있다.
@Get(':id')
findOne(@Param('id') id: string) {
if (+id < 1) {
throw new NotFoundException('User is not found');
}
return this.usersService.findOne(+id);
}
응답을 받는 서버 또는 클라이언트와 약속된 커스텀 헤더를 추가할 경우, @Headers 데코레이터를 사용한다.
인자로는 헤더 이름과 값을 받는다.
import { Header } from '@nestjs/common';
@Header('Custom', 'Test Header')
@Get(':id')
findOneWithHeader(@Param('id') id: string) {
return this.usersService.findOne(+id);
}
리디렉션(Redirection)
- 응답 바디에 redirectionUrl을 포함시켜 클라이언트가 스스로 페이지를 이동하도록 @Redirection 데코레이터 사용.
- 두번째 인자는 상태코드.
하위 도메인 라우팅
- 새로운 컨트롤러 생성
- 새로운 컨트롤러에서도 같은 엔드포인트를 받도록 하는데, 먼저 처리될 수 있도록 순서를 수정
- @Controller 데코레이터는 ControllerOptions 객체를 인자로 받는데, 이 때 host 속성에 하위 도메인을 기술한다.
-
@Controller({ host: 'api.example.com' }) // 하위 도메인 요청 처리 설정 export class ApiController { @Get() // 같은 루트 경로 index(): string { return 'Hello, API'; // 다른 응답 } }
요청 페이로드 다루기
- NestJS는 DTO (Data Transfer Object)를 정의하여 쉽게 다룰 수 있다.
- 예를 들어, Users 리소스를 생성하기 위해 POST /users 로 들어오는 바디는 CreateUserDto 로 받을 수 있다.
-
export class CreateUserDto { name: string; email: string; }
@Post()
create(@Body() createUserDto: CreateUserDto) {
const { name, email } = createUserDto;
return `유저를 생성했습니다. 이름: ${name}, 이메일: ${email}`;
}
프로바이더 (Provider)
- 앱이 제공하고자 하는 핵심 기능, 즉 비즈니스 로직을 수행하는 역할을 하는 것.
- Service, Repository, Factory, Helper 등 여러 형태로 구현이 가능.
- Nest에서 제공하는 프로바이더의 핵심은 의존성을 주입할 수 있다는 점이다.
- DI : Dependency Injection 를 이용하면 객체 생성과 사용의 관심을 분리할 수 있다.
모듈(Module)
- 전역 모듈을 만드는 방법 : @Global() 데코레이터 선언
- 동적 모듈(Dynamic Module)
'dev > NestJS' 카테고리의 다른 글
[NestJS] 유저 서비스와 회원가입 (0) | 2022.01.02 |
---|