Mongoose 사용하기 [Nest.js]
2023. 12. 3. 09:00ㆍ프레임워크/Nest.js
MongoDB Atlas 세팅
https://muyeon95.tistory.com/286
프로젝트 생성
nest new mongo-connect-poc
환경변수 세팅
아래 링크를 활용해 환경변수를 먼저 세팅해준다.
https://muyeon95.tistory.com/287
mongoose 설치
npm install --save @nestjs/mongoose mongoose
MongooseModule 매핑
// src/app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
import { MongooseModule } from '@nestjs/mongoose'; // 추가
@Module({
imports: [
ConfigModule.forRoot(),
MongooseModule.forRoot(process.env.MONGODB_URI), // 추가
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
Mongoose 로그 세팅
// src/app.module.ts
// ... 중략
export class AppModule implements NestModule {
private readonly isDev: boolean = process.env.MODE === 'dev' ? true : false;
configure(consumer: MiddlewareConsumer) {
consumer.apply(LoggerMiddleware).forRoutes('*');
mongoose.set('debug', this.isDev);
}
스키마 생성
우선 class-transformer 와 class-validator 를 install 한다.
npm i --save class-validator class-transformer
DB 에 저장될 형식을 검증하기 위해서 사용한다.
다음으로 user.schema.ts 파일을 만든다.
import { Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document, SchemaOptions } from 'mongoose';
const options: SchemaOptions = {
timestamps: true, // DB 에서 만들어질 때 timestamp 를 찍어준다.
};
@Schema(options) // 스키마 정의
export class User extends Document {} // mongoose의 Document를 상속
export const UserSchema = SchemaFactory.createForClass(User); // User 클래스를 스키마로 만듦
export class User 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;
}
생성해보기
dto 생성
import { IsEmail, IsString } from 'class-validator';
export class userCreateDto {
@IsEmail()
email: string;
@IsString()
name: string;
@IsString()
password: string;
}
모듈 등록
imports: [
ConfigModule.forRoot(),
MongooseModule.forRoot(process.env.MONGODB_URI),
MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]), // 등록
],
컨트롤러
@Post()
async signUp(@Body() body: userCreateDto) {
return await this.appService.signUp(body);
}
서비스
constructor(
@InjectModel(User.name) private readonly userModel: Model<User>,
) {}
async signUp(body: userCreateDto) {
const { email, name, password } = body;
const user = await this.userModel.create({ email, name, password });
return user;
}
'프레임워크 > Nest.js' 카테고리의 다른 글
Dependency Injection / Inversion of Control [의존성 주입 / 제어의 역전] [NestJS] (0) | 2023.12.13 |
---|---|
NestJS 요청 라이프 사이클 (NestJS Request Lifecycle) (0) | 2023.12.11 |
nestjs prisma 사용해보기 with AWS RDS (1) | 2023.12.04 |
Nest.js 미들웨어 (logger 미들웨어) (1) | 2023.12.02 |
Nest.js 환경변수 설정하기 with ConfigModule [Nest.js] (0) | 2023.12.02 |