07. mongoDB 스키마 설계와 Class-validator

유현준·2022년 8월 21일
0

hello! Nest

목록 보기
7/17

1. 스키마 설계

  • Nest에서 mongoDB의 스키마 설게는 다음과 같이 Class와 decoration 패턴을 이용한다.
  • Prop에는 각 데이터의 옵션을 설정한다.
  • Option에는 생성된 스키마와 관련된 옵션을 넣는다.

2. Class-validator

  • Class로 생성된 인스턴스에 삽입되는 데이터의 validation을 decoration patttern을 통해 지원하는 라이브러리다.
  • 지원하는 기능은 아래 깃헙 링크를 통해 참고할 수 있다.
    https://github.com/typestack/class-validator
  • Class-validator 라이브러리를 사용하려면, main.ts에서 ValidationPipe를 등록해야한다.
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe()); // class - validator 사용을 위한 Pipe 등록
  app.useGlobalFilters(new HttpExceptionFilter());
  await app.listen(process.env.PORT);
}
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document, SchemaOptions } from 'mongoose';
import { IsEmail, IsNotEmpty, IsString } from 'class-validator';
// 클래스 벨리데이터, 클래스에 삽입되는 멤버변수들의 validation.
// decoration 패턴을 이용해서 validation을 지원

// 스키마와 관련된 옵션
const options: SchemaOptions = {
  timestamps: true, // DB에서 스키마 생성 시 일자를 출력
};

@Schema(options)
export class Cat extends Document {
  @Prop({
    //스키마에 들어가는 각 데이터들의 옵션 설정
    required: true,
    unique: true,
  })
  @IsEmail()
  @IsNotEmpty()
  email: string;

  @Prop({
    required: true,
  })
  @IsString()
  @IsNotEmpty()
  name: string;

  @Prop({
    required: true,
  })
  @IsString()
  @IsNotEmpty()
  password: string;

  @Prop()
  @IsString()
  imgUrl: string;
}

export const CatSchema = SchemaFactory.createForClass(Cat);

참고자료

profile
차가운에스프레소의 개발블로그입니다. (22.03. ~ 22.12.)

0개의 댓글