app.module.ts
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatsModule } from './cats/cats.module';
import { LoggerMiddleware } from './common/middlewares/logger.middleware';
import { MongooseModule } from '@nestjs/mongoose';
import { ConfigModule } from '@nestjs/config'; // .env 사용
import mongoose from 'mongoose';
@Module({
imports: [
// 모듈 사용
ConfigModule.forRoot(),
MongooseModule.forRoot(process.env.MONGODB_URI), // db 연결
CatsModule,
],
controllers: [AppController],
providers: [AppService], // 제거하면 공급자가 없음 그래서 controller(소비자)는 제품(공급자, Service)을 사용할 수 없음
})
export class AppModule implements NestModule {
private readonly isDev: boolean = process.env.MODE === 'dev' ? true : false;
configure(consumer: MiddlewareConsumer) {
consumer.apply(LoggerMiddleware).forRoutes('cats'); // cats router에 binding
mongoose.set('debug', this.isDev); // mongoose query가 찍혀지게 됨, 배포할 땐 false로 해놔야한다.
}
}
export class AppModule implements NestModule {
private readonly isDev: boolean = process.env.MODE === 'dev' ? true : false;
configure(consumer: MiddlewareConsumer) {
consumer.apply(LoggerMiddleware).forRoutes('cats'); // cats router에 binding
mongoose.set('debug', this.isDev); // mongoose query가 찍혀지게 됨, 배포할 땐 false로 해놔야한다.
}
}
AppModule
에 위 코드를 작성해서 mongoose query가 찍혀지게 한다.
private readonly isDev: boolean = process.env.MODE === 'dev' ? true : false;
위 코드를 통해 배포할 때는 isDev
값이 false
가 되게 한 후로 배포한다.
cats/cats.schema.ts
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) // schema 데코레이션으로 스키마 정의
export class Cat extends Document {
@Prop({
required: true, // 꼭 필요, default는 false
unique: true, // 유니크 해야함
})
@IsEmail() // class-validator
@IsNotEmpty() // class-validator
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);
Schema
데코레이션으로 DB의 스키마를 정의하고 class-validator
를 통해 해당 속성의 type을 정의한다.
class-validator
는 CLI에서 아래 명령어를 통해 설치한다.
npm i --save class-validator class-transformer
그리고 main.ts
에서 등록한다.