NestJS CRUD

이지연·2022년 6월 12일
0

NestJS

목록 보기
2/2
post-thumbnail

CRUD

NestJS는 REST API에 따라 GET, POST, PUT, DELETE 전송을 통해 CRUD 가능하다

Controller

일단 Controller를 만들어 보자.
Spring을 사용해 본 사람이라면 누구나 아주 익숙한 어노테이션을 통해 Controller를 만들 수 있다.

// ./cat/cats.controller.ts
import { Body, Controller, Get, Post } from '@nestjs/common';
import { CatsService } from './cats.service';
import { CreateCatDto } from './dto/create-cat.dto';
import { Cat } from './interfaces/cat.interface';

@Controller('cats')
export class CatsController {
  constructor(private catsService: CatsService) {} // DI(Dependency Injection)

  @Post()
  async create(@Body() createCatDto: CreateCatDto) {
    this.catsService.create(createCatDto);
  }

  @Get()
  async findAll(): Promise<Cat[]> {
    return this.catsService.findAll();
  }
}
  1. Post로 데이터를 생성
  2. Get으로 데이터를 조회

Provider

위에 DI(의존성 주입)으로 ControllerService가 주입된 것을 볼 수 있다.
이번앤 Service를 만들어 보겠다

// ./cats/cats.service.ts
import { Injectable } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';

@Injectable()
export class CatsService {
  private readonly cats: Cat[] = [];

  create(cat: Cat) {
    this.cats.push(cat);
  }

  findAll(): Cat[] {
    return this.cats;
  }
}
  1. Injectable 의존성 주입 가능한 객체
  2. create, findAll 기능 정의

Module

import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';

@Module({
  // imports: [], // 이 모듈에서 사용하기 위한 프로바이더를 가지고 있는 다른 모듈 가져오기
  controllers: [CatsController],
  providers: [CatsService],
  exports: [CatsService], // 다른 모듈에서 해당 모듈을 사용하고자 할 때 필요
})
export class CatsModule {
  // constructor(private catsService: CatsService) {} // DI(Dependency injection)
}
  1. controllers, providers, exports 지정

💡 단, 모듈간 순환 종속성이 발생할 수 있으므로 모듈은 프로바이더처럼 주입해서 사용할 수 없다.

최종적으로 아래와 같은 구조로 기본 모듈을 구성하면 된다.

src
├── cats
│   ├── dto
│   │   ├──create-cat.dto.ts
│   ├── interfaces
│   │   ├──cat.interface.ts
│   ├── cats.controller.ts
│   ├── cats.module.ts
│   ├── cats.service.ts
├── app.module.ts
└── main.ts

참고

profile
dev log

0개의 댓글