쿼리 로그로 찍어줄 수 있음.

import * as mongoose from 'mongoose';

export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(LoggerMiddleware).forRoutes('cats');
    mongoose.set('debug', true);
  }
}

이런식으로 사용하면 쿼리를 log로 찍어준다.

프로덕션으로 할 때는 false로 잡아야 한다.

그래서 env 파일로 관리하는 것이 좋다.

스키마 설계

cats.schema.ts를 만든다

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { HydratedDocument } from 'mongoose';

export type CatDocument = HydratedDocument<Cat>;

const options: SchemaOptions = {
  timestamps: true,
};

@Schema(options)
export class Cat {
  @Prop()
  name: string;

  @Prop()
  age: number;

  @Prop()
  breed: string;
}


export const CatSchema = SchemaFactory.createForClass(Cat);

@Schema 데코레이션을 사용하여 스키마를 만들어줌.

timestamp 라는 것은 시간별로 로그 찍어주는 것.

@Prop 안에는

@Prop({
  required: true,
  unique: true
})

이런식으로 세팅 해주는게 필요할 수 있다.

Class Validator

npm i --save class-validator class-transformer
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { IsEmail, IsNotEmpty, IsString } from 'class-validator';
import { Document, SchemaOptions } from 'mongoose';

const options: SchemaOptions = {
  timestamps: true,
};

@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);

이렇게 하면 해당 class attribute에 조건을 줄 수 있다.