티스토리 뷰
NestJS 이용하여
MongoDB 연결하는
방법
NPM MongoDB 모듈 설치
@nestjs/mongoose 모듈 설치하기
npm i --save @nestjs/mongoose mongoose
app.module.ts 파일에 MongooseModule 추가하기
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatsModule } from './cats/cats.module';
@Module({
imports: [CatsModule, MongooseModule.forRoot('mongodb://localhost/nest')],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
MongooseModule.forRoot() 메서드의 인자로 MongoDB 연결 문자열을 전달합니다.
이 예제에서는 mongodb://localhost/nest로 연결합니다.
여기까지 MongoDB를 연결하기 위한 준비 단계 입니다.
그럼 이제
예제를 통해
MongoDB 를 활용한
Cats 모델을
구현을 해볼께요
우선, 필요한 소스파일 구조입니다
-
cats.controller : HTTP 요청을 처리하는 컨트롤러 클래스로, @Controller() 데코레이터로 정의되며, CatsService를 주입받아 create()와 findAll() 메서드를 구현합니다.
-
cats.module : CatsService와 CatsController를 모듈화하여 관리하는 모듈 클래스로, @Module() 데코레이터로 정의되며, mongoose를 사용하여 MongoDB와 연결합니다.
-
cats.service : 데이터베이스 작업을 수행하는 서비스 클래스로, @InjectModel() 데코레이터를 사용하여 Cat 모델을 주입받아 create()와 findAll() 메서드를 구현합니다.
-
schema/cat.schema : Cat 모델의 스키마 정의로, @Schema() 데코레이터로 정의되며, mongoose를 사용하여 MongoDB에 저장될 필드와 데이터 타입을 정의합니다.
schema/cat.schema 작성
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
export type CatDocument = Cat & Document;
@Schema()
export class Cat {
@Prop()
name: string;
@Prop()
age: number;
@Prop()
breed: string;
}
export const CatSchema = SchemaFactory.createForClass(Cat);
위 예제에서는 @nestjs/mongoose 모듈에서 제공하는 @Schema()와 @Prop() 데코레이터를 사용하여 Mongoose Schema를 작성합니다. CatSchema는 Mongoose Schema 객체로부터 생성됩니다.
cats.module.ts 파일에 Mongoose Model 추가하기
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
import { Cat, CatSchema } from './schemas/cat.schema';
@Module({
imports: [MongooseModule.forFeature([{ name: Cat.name, schema: CatSchema }])],
controllers: [CatsController],
providers: [CatsService],
})
export class CatsModule {}
MongooseModule.forFeature() 메서드를 사용하여 Cat 모델을 등록합니다.
cats.service.ts 파일에서 Mongoose Model 사용하기
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { Cat, CatDocument } from './schemas/cat.schema';
@Injectable()
export class CatsService {
constructor(@InjectModel(Cat.name) private catModel: Model<CatDocument>) {}
async create(cat: Cat): Promise<Cat> {
const createdCat = new this.catModel(cat);
return createdCat.save();
}
async findAll(): Promise<Cat[]> {
return this.catModel.find().exec();
}
}
@InjectModel() 데코레이터를 사용하여 Cat 모델을 주입하고, mongoose 모듈에서 제공하는 Model 인터페이스를 사용하여 Mongoose Model을 사용합니다.
CatsController 에서 CatsService 를 사용하는 방법
import { Controller, Get, Post, Body } from '@nestjs/common';
import { CatsService } from './cats.service';
import { Cat } from './schemas/cat.schema';
@Controller('cats')
export class CatsController {
constructor(private readonly catsService: CatsService) {}
@Post()
async create(@Body() cat: Cat): Promise<Cat> {
return this.catsService.create(cat);
}
@Get()
async findAll(): Promise<Cat[]> {
return this.catsService.findAll();
}
}
@Controller() 데코레이터를 사용하여 CatsController 클래스를 정의합니다. CatsService를 주입하여 create()와 findAll() 메서드를 구현합니다. @Post() 데코레이터를 사용하여 create() 메서드가 POST 요청을 처리하도록 지정합니다. @Body() 데코레이터를 사용하여 요청 본문의 데이터를 cat 매개변수로 전달합니다. @Get() 데코레이터를 사용하여 findAll() 메서드가 GET 요청을 처리하도록 지정합니다.
이제 CatsController를 통해 MongoDB에 데이터를 추가하거나 조회할 수 있습니다.
실행하기
npm run start
Post Man 테스트 해보기
우선 Post로 냐옹이 한마리 생성하기
MongoDB 툴에서도 잘 들어 가졌네요
다음은, Get 방금 생성된 냐옹이 Find 테스트
이렇게 잘 나오는걸 확인 했습니다.
오늘은 여기까지!!
'Dev Story > NestJS' 카테고리의 다른 글
NestJS 이용한 Node JS 기반의 백앤드 서버 구현하기 1장 (0) | 2023.04.05 |
---|
- Total
- Today
- Yesterday
- MongoDB
- 실습
- 한식
- svelte
- Redis
- Docker 관리
- DevOps
- 쉽게따라하기
- typescript
- 딥러닝
- docker
- Containerization
- python
- GPT
- lambda
- 따라해보기
- 따라하기
- nestjs
- frontend
- 클라우드
- ubuntu
- cloudcomputing
- svelte 따라해보기
- ChartGPT
- 티스토리
- EC2
- ML
- AI
- 개발이야기
- AWS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |