npm 설치
npm i @nestjs/mongoose mongoose
app.module.ts에 import
imports: [
MongooseModule.forRoot(MONGODB_URI),
],
Validation
npm i --save class-validator class-transformer
Cat 스키마 생성
몽구스에서는 모든 것이 스키마에서 파생된다.
스키마는 모델을 정의하고, 모델을 통해 데이터베이스에 접근하여 스키마(테이블, 문서) 생성, 데이터 편집을 진행한다.
위에서 설치한 class-validator를 통해 컬럼을 정의한다.
@Schema() 를 사용하여 클래스를 스키마 정의로 표기한다.
스키마 옵션의 timestamps를 true로 설정하면 스키마에 생성일시, 업데이터일시가 자동적으로 입력되고 수정된다.
import { Prop, Schema, SchemaFactory, SchemaOptions } from '@nestjs/mongoose';
import { IsNotEmpty, IsString } from 'class-validator';
const options: SchemaOptions = {
timestamps: true,
};
@Schema(options)
export class Cat {
@IsNotEmpty()
@IsString()
@Prop({
unique: true,
required: true,
})
name: string;
}
export const CatSchema = SchemaFactory.createForClass(Cat);
cat 모듈
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
import { MongooseModule } from '@nestjs/mongoose';
import { Cat, CatSchema } from './cats.schema';
@Module({
imports: [MongooseModule.forFeature([{ name: Cat.name, schema: CatSchema }])],
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}
cat 컨트롤러
주의할 점으로 모델을 활용해 몽고DB에 접근하는데 시간이 걸리므로 await를 넣어야한다.
import { Body, Controller, Post, UnauthorizedException } from '@nestjs/common';
import { CatsRequestDto } from './dto/cats.request.dto';
import { Cat } from './cats.schema';
import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';
@Controller('cats')
export class CatsController {
constructor(@InjectModel(Cat.name) private readonly catModel: Model<Cat>) {}
@Post()
async signIn(@Body() cat: CatsRequestDto) {
const isExists = await this.catModel.exists({ name: cat.name }); // { name: 'a' }
if (isExists) {
throw new UnauthorizedException('is Exist');
}
this.catModel.create(cat).then(() => {
console.log('create success');
});
return 'sign in';
}
}
Debug 확인
App 모듈에서 NestModule을 상속받고, mongoose.set('debug', true)를 하면 디버그를 할 수 있다.
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatsModule } from './cats/cats.module';
import { ConfigModule } from '@nestjs/config';
import { MongooseModule } from '@nestjs/mongoose';
import mongoose from 'mongoose';
@Module({
imports: [
CatsModule,
ConfigModule.forRoot(),
MongooseModule.forRoot(process.env.MONGODB_URI),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
mongoose.set('debug', true);
}
}
'framework > NestJs' 카테고리의 다른 글
[NestJs] JWT 사용 (0) | 2023.04.05 |
---|---|
[NestJs] 디자인 패턴 적용 (0) | 2023.03.30 |
[NestJs] swagger 예시 (0) | 2023.03.30 |
[NestJs] npm 명령어 (0) | 2023.03.29 |