NestJs 튜토리얼5 [Restfull CRUD API]

NestJs 튜토리얼5 [Restfull CRUD API]

개요


지금까지 배운걸 사용하고 typeORM을 이용하여 DTO와 Entity를 정의하고 Restfull 한 API를 만들어 보고 nestjs의 규칙등도 알아보자

NestJS의 명명 규칙


  1. 클래스(Class)명:
      • 클래스명은 대문자로 시작하고 카멜 케이스(CamelCase)를 사용합니다.
      • RESTfull의 컨벤션을 따르기 위해 복수형으로 써주는 것이 좋다
        • 강제적인 룰은 아니다
      • 예: UserService, ProductController, OrderService
  1. 모듈(Module)명:
      • 모듈명은 대문자로 시작하고 카멜 케이스를 사용합니다.
      • 예: UserModule, ProductModule, OrderModule
  1. 컨트롤러(Controller)명:
      • 컨트롤러명은 대문자로 시작하고 카멜 케이스를 사용합니다.
      • 예: UserController, ProductController, OrderController
  1. 서비스(Service)명:
      • 서비스명은 대문자로 시작하고 카멜 케이스를 사용합니다.
      • 예: UserService, ProductService, OrderService
  1. 리포지토리(Repository)명:
      • 리포지토리명은 대문자로 시작하고 카멜 케이스를 사용합니다.
      • 예: UserRepository, ProductRepository, OrderRepository
  1. DTO(Data Transfer Object)명:
      • DTO명은 대문자로 시작하고 카멜 케이스를 사용합니다.
      • 예: CreateUserDto, UpdateProductDto, OrderDto
  1. 인터페이스(Interface)명:
      • 인터페이스명은 대문자로 시작하고 카멜 케이스를 사용합니다.
      • 예: IUser, IProduct, IOrder
  1. 파일명:
      • 파일명은 소문자로 작성하며, 단어 사이에는 하이픈(-)을 사용합니다.
      • 예: user.controller.ts, product.service.ts, order.module.ts

User Restfull API


user를 예시로 만들어 보자

User의 속성

  • id : number
  • email : string
  • password : string
  • name : string
  • createdAt : Date

유저 리소스 생성


$ nest g resource user
notion image
notion image
notion image
notion image
REST API 엔터 치고 생성하자
dto, entity, controller, module, service 생성후 module import까지 자동으로 되어있다

Entity생성


// user/entities/user.entity.ts import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; @Entity() export class User { @PrimaryGeneratedColumn() id: number; @Column() email: string; @Column() password: string; @Column() name: string; @Column({ name: 'created_at', type: 'timestamp with time zone', }) createdAt: Date; static from(email: string, password: string, name: string): User { const user = new User(); user.email = email; user.password = password; user.name = name; user.createdAt = new Date(); return user; } }

DTO 생성


// user/dto/create-user.dto.ts import { User } from '../entities/user.entity'; export class CreateUserDto { email: string; password: string; name: string; toUserEntity(): User { return User.from(this.email, this.password, this.name); } }

module 설정


APP_PIPE


ValidationPipe
import { Module, ValidationPipe } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { UserModule } from './user/user.module'; import { APP_PIPE } from '@nestjs/core'; @Module({ imports: [UserModule], providers: [ { provide: APP_PIPE, useValue: new ValidationPipe({ transform: true, whitelist: true, forbidNonWhitelisted: true, }), }, ], }) export class AppModule {}
config
$ npm i @nestjs/config
 
 
database
$ npm i @nestjs/typeorm
 

유저생성


controller에서 post로 body 데이터를 받아 service로 dto를 넘겨주자
// user/user.controller.ts ... @Post() create(@Body() createUserDto: CreateUserDto) { return this.userService.create(createUserDto); } ...
// user/user.service.ts ... create(createUserDto: CreateUserDto) { const user: User = createUserDto.toUserEntity(); return user; } ...
댓글 0

등록된 댓글이 하나도 없습니다...😢