NestJS Services

노마드코더 NestJS로 API 만들기 수강 중

Services 생성

nest g s movies
  • 자동으로 movies 폴더 하위에 movies.service.spec.tsmovies.service.ts 파일 생성
  • app.module.ts 모듈에 서비스가 자동으로 등록
@Module({
  imports: [],
  controllers: [MoviesController],
  providers: [MoviesService],
})

Services 정의

변수 정의

@Injectable()
export class MoviesService {
  private movies: Movie[] = [];
  ...
}

Get

getAll(): Movie[] {
  return this.movies;
}
getOne(id: string): Movie {
  const movie = this.movies.find((movie) => movie.id === +id);
  if (!movie) {
    throw new NotFoundException(`Movie with ID ${id} not found.`);
  }
  return movie;
}
  • movid id를 찾지 못하면 예외 처리
  • +id로 문자열을 숫자 형태로 변환

Delete

deleteOne(id: string) {
  this.getOne(id);
  this.movies = this.movies.filter((movie) => movie.id !== +id);
}
  • 삭제하기 전에 movie id를 먼저 검색해서 예외 처리

Post

create(movieData) {
  this.movies.push({
    id: this.movies.length + 1,
    ...movieData,
  });
}
  • id 자동 생성

Patch

update(id: string, updateData) {
  const movie = this.getOne(id);
  this.deleteOne(id);
  this.movies.push({ ...movie, ...updateData });
}
  • movie id를 먼저 검색, 예외 처리
  • 해당 id 정보를 삭제 후 새로운 정보로 생성시켜 업데이트

Controllers 정의

Service Constructor 생성`

@Controller('movies')
export class MoviesController {
  constructor(private readonly moviesService: MoviesService) {}
  • NestJS에서는 서비스를 생성자로 생성해서 정의된 함수들을 불러옴

Get

@Get()
getAll(): Movie[] {
  return this.moviesService.getAll();
}
@Get('/:id')
getOne(@Param('id') movieId: string): Movie {
  return this.moviesService.getOne(movieId);
}

Post

@Post()
create(@Body() movieData) {
  return this.moviesService.create(movieData);
}

Delete

@Delete('/:id')
remove(@Param('id') movieId: string) {
  return this.moviesService.deleteOne(movieId);
}

Patch

@Patch('/:id')
patch(@Param('id') movieId: string, @Body() updateData) {
  return this.moviesService.update(movieId, updateData);
}

[참조] 노마드코더 NestJS로 API 만들기

끝!