service 생성
$ nest g s
entity 폴더 생성 > 데이터베이스 모델 생성
- 가짜 데이터베이스
export class Movie {
id: number;
title: string;
year: number;
genres: string[];
}
service 에 로직 구현
단일 책임의 원칙 - 한개의 요소는 한개의 기능만 책임진다.
@Injectable()
export class MovieService {
private movies: Movie[] = [];
getAll(): Movie[] {
return this.movies;
}
getOne(id: string): Movie {
const movie = this.movies.find((movie) => movie.id === +id);
if (!movie) {
throw new NotFoundException('찾을 수 없습니다.');
}
return movie;
}
deleteOne(id: string) {
this.getOne(id);
this.movies = this.movies.filter((movie) => movie.id !== +id);
}
create(movieData) {
this.movies.push({
id: this.movies.length + 1,
...movieData,
});
}
update(id: string, movieData) {
const movie = this.getOne(id);
this.deleteOne(id);
this.movies.push({
...movie,
...movieData,
});
}
}
예외처리 핸들러
Nest 에서 제공하는 모든 예외는 HttpException을 상속하고 있다.
- throw new BadRequestException('잘못된 요청입니다');
- throw new NotFoundException('찾을 수 없습니다.');
- UnauthorizedException
- NotFoundException
- RequestTimeoutException
- InternalServerErrorException
- BadGatewayException
- ServiceUnavailableException
생성자 기반 주입
- Nest에서 제공하는 프로바이더의 핵심은 의존성을 주입할 수 있다는 점이다.
- 상속 관계가 아닌경우 일반적으로 생성자 기반 주입을 권장한다.
- 의존성주입DI는 OOP에서 많이 활용하는 기법 -> 객체를 생성하고 사용할 때 관심사 분리할 수 있다. 코드 가독성, 재사용성 증가
- Service 클래스에 @Inhectable 을 선언하면 다른 컴포넌트에서 주입 가능한 프로바이더가 된다. default로 싱글턴 인스턴스가 된다.
controller 생성자에서 service 주입받기 (import 하는 방법X)
@Controller('movie')
export class MovieController {
constructor(private readonly movieService: MovieService) {}
@Get()
getAll(): Movie[] {
return this.movieService.getAll();
}
@Get(':id')
getOne(@Param('id') id: string): Movie {
return this.movieService.getOne(id);
}
@Post()
create(@Body() movieData) {
return this.movieService.create(movieData);
}
@Delete()
remove(@Param('id') id: string) {
return this.movieService.deleteOne(id);
}
@Patch(':id')
patch(@Param('id') id: string, @Body() movieData) {
return this.movieService.update(id, movieData);
}
}
728x90
반응형
'개발공부 > NestJS' 카테고리의 다른 글
[NestJs] Modules, Injection (0) | 2023.08.16 |
---|---|
[노마드 코더 NestJS로 API 만들기] 2 DTO, Validation (0) | 2023.08.13 |
2 Rest API - Controller, Route [노마드 코더 NestJS로 API 만들기] (0) | 2023.08.12 |
[NestJS] 초기 세팅 (0) | 2023.08.11 |
NestJs 밋업 Shall We NestJS? 정리 (0) | 2023.08.03 |
댓글