• Home
  • About
    • Lajancia Workspace photo

      Lajancia Workspace

      .

    • Learn More
    • Email
    • LinkedIn
    • Instagram
    • Tumblr
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects
  • Record
  • Blender
  • Blockchain

Nest.js - 3

10 Jun 2022

Reading time ~1 minute

3. nest.js


service

nest g service

위 명령어를 이용하여 movies.service.spec.ts와 movies.service.ts 파일을 생성할 수 있다.

추가적으로 app.module.ts의 providers에 MoviesService를 추가한다

update

{
"hack":"by me"
}

patch를 실행하는 동안 해커로 인해 원치 않은 데이터가 추가될 가능성이 있기 때문에 update에서 이러한 데이터를 검수하는 유효성 검사를 실행해야 한다. nest.js에는 이러한 유효성 검사에 도움을 줄 수 있는 유용한 도구를 지원한다.

DTO

데이터 전송 객체(Data transfer Object)

export class CreateMovieDto{

    readonly title: string;
    readonly year: number;
    readonly genres: string[];
}

보낼 데이터를 정의한다.

그러나 이것으로만은 유효성 검사를 수행할 수 없다. DTO는 프로그래머로서 코드를 더 간결하게 만들 수 있도록 하는 역할이다. 유효성 검사를 수행하게 하기 위해서는 몇가지 추가적인 작업이 필요하다.

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe());
  await app.listen(3000); //port
}

Validationpipe를 이용하여 유효성 검사를 한다.

npm i class-validator class-transformer
  • 설치해야 할 모듈
import { IsString,IsNumber } from "class-validator";

export class CreateMovieDto{

    @IsString()
    readonly title: string;
    @IsNumber()
    readonly year: number;
    @IsString({each:true})
    readonly genres: string[];
}

이러한 식으로 코드를 작성하면 유효성 검사를 통해 형식에 맞지 않은 데이터가 post 될 경우 에러를 발생한다.

{
	"statusCode": 400,
	"message": [
		"title must be a string",
		"year must be a number conforming to the specified constraints",
		"each value in genres must be a string"
	],
	"error": "Bad Request"
}

Validationpipe

위의 유효성 검사를 위해 사용한 Validationpipe는 여러 기능을 가지고 있다.

  • whitelist - 데코레이터가 없는 모든 객체를 무시한다. (hacked 데이터는 등록된 데코레이터가 없기 때문에 무시된다)
  • forbidNonWhiteListed - 잘못된 데이터가 수신되면 존재해서는 안되는 데이터라고 출력
  • transform - 유저들이 보낸 데이터를 우리가 원하는 실제 타입으로 변환한다.

update DTO

import { IsString,IsNumber } from "class-validator";

export class UpdateMovieDto{

    @IsString()
    readonly title?: string;
    @IsNumber()
    readonly year?: number;
    @IsString({each:true})
    readonly genres?: string[];
}

?를 이용하여 필수 사항이 아님을 설정한다.

PartialType

npm i @nestjs/mapped-types


studyNest.jstypescript Share Tweet +1