NestJS 세팅하기

2020. 10. 2. 15:33DEV/ETC

반응형

NestJS

NestJS란?

  • Express와 마찬가지로 Node.js 서버 사이드에서 사용 가능한 프레임워크
  • Express를 기반으로 제작되어 TypeScript로 서버 코드 작성
  • 선택적으로 Fastify 사용 가능

Project Setup

NestJS 설치

yarn보다는 npm을 추천함

$ npm i -g @nestjs/cli

New Project

$ nest new
$ [project name]

파일 생성

$ nest g [file type] [file name]
$ nest g controller app

참고

$ nest
Usage: nest <command> [options]

Options:
  -v, --version                                   Output the current version.
  -h, --help                                      Output usage information.

Commands:
  new|n [options] [name]                          Generate Nest application.
  build [options] [app]                           Build Nest application.
  start [options] [app]                           Run Nest application.
  info|i                                          Display Nest project details.
  update|u [options]                              Update Nest dependencies.
  add [options] <library>                         Adds support for an external library to your project.
  generate|g [options] <schematic> [name] [path]  Generate a Nest element.
    Available schematics:
      ┌──────────┬─────────┐
      │ name          │ alias       │
      │ application   │ application │
      │ class         │ cl          │
      │ configuration │ config      │
      │ controller    │ co          │
      │ decorator     │ d           │
      │ filter        │ f           │
      │ gateway       │ ga          │
      │ guard         │ gu          │
      │ interceptor   │ in          │
      │ interface     │ interface   │
      │ middleware    │ mi          │
      │ module        │ mo          │
      │ pipe          │ pi          │
      │ provider      │ pr          │
      │ resolver      │ r           │
      │ service       │ s           │
      │ library       │ lib         │
      │ sub-app       │ app         │
      └──────────┴─────────┘

Project 구조

main.ts

모듈 결정

module

  • 필요한 파일들을 import/export > controller, service 등

controller

  • url을 가져오고 함수를 실행
  • express의 router 역할
@Get('/hello')
sayHello(): string {  // function name : return type
    return 'Hello Everyone';
}

service

  • 로직이나 비즈니스 서비스 실행 담당
  • db 연결

entity

  • 데이터 연결 타입
  • injectRepository : 변수 지정처럼 한 번 받아서 재사용 > service, module 설정 필수
  • connectXXX : 임시로 한 번 연결해서 데이터 사용

setting

class-validator

 -1,8 +1,16 @@
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(
    new ValidationPipe({
      whitelist: true,  // 데이터 타입 validation 실행
      forbidNonWhitelisted: true,  // 맞지 않는 타입 금지 설정
      transform: true,  // url로 들어온 데이터 타입 자동 변환 eg. string type >> number로 자동 변환
    }),
  );
  await app.listen(3000);
}
bootstrap();

mapped-types

Mapped Types
@nestjs/mapped-types

  • Dto 변환 도와줌

Create Dto

import { IsString, IsNumber, IsOptional } from 'class-validator';

export class CreateMovieDto {
  @IsString()
  readonly title: string;

  @IsNumber()
  readonly year: number;

  @IsOptional()
  @IsString({ each: true })
  readonly genres: string[];
}

Update Dto

import { IsString, IsNumber } from 'class-validator';
import { PartialType } from '@nestjs/mapped-types';
import { CreateMovieDto } from './create-movie.dto';

export class UpdateMovieDto extends PartialType(CreateMovieDto) {}

참고
Single Resposibility Principle
NestJS 기반 게시판 REST API - DB 연동

반응형