728x90
※ 기록용 ※
1. mongoose 설치
npm install --save @nestjs/mongoose mongoose
2. app.module.ts : nestjs 애플리케이션에서 MongoDB와의 연결을 설정
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { MongooseModule } from '@nestjs/mongoose'; //mongoDB 연결
import { VideoModule } from './video/video.module';
@Module({
imports: [MongooseModule.forRoot('mongodb://localhost:27017/test'), VideoModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
3. video.schema.ts : 데이터 모델을 정의
import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
import { IsNotEmpty, IsString } from "class-validator";
import { Document } from 'mongoose';
export type VideoDocument = Video & Document;
@Schema()
export class Video extends Document {
@Prop({ required: true })
@IsString()
@IsNotEmpty()
name: string;
@Prop()
@IsString()
@IsNotEmpty()
url: string;
}
export const VideoSchema = SchemaFactory.createForClass(Video);
4. video.service.ts : MongoDB와 상호 작용을 위한 서비스를 생성
import { Injectable } from '@nestjs/common';
import { Video, VideoDocument } from './schemas/video.schema';
import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';
@Injectable()
export class VideoService {
constructor(@InjectModel(Video.name) private videoModel: Model<VideoDocument>) { }
async findAll(): Promise<Video[]> {
return this.videoModel.find().exec();
}
async create(video: Video): Promise<Video> {
const createVideo = new this.videoModel(video);
return createVideo.save();
}
}
5. video.controller.ts : MongoDB 서비스를 사용
import { Controller, Get, Post, Body } from '@nestjs/common';
import { VideoService } from './video.service';
import { Video } from './schemas/video.schema';
@Controller('video')
export class VideoController {
constructor(private readonly videoService: VideoService) { }
@Get()
findAll(): Promise<Video[]> {
return this.videoService.findAll();
}
@Post()
create(@Body() video: Video): Promise<Video> {
return this.videoService.create(video);
}
}
6. video.module.ts : 현재 범위에 등록할 모델을 정의
import { Module } from '@nestjs/common';
import { VideoService } from './video.service';
import { VideoController } from './video.controller';
import { MongooseModule } from '@nestjs/mongoose';
import { Video, VideoSchema } from './schemas/video.schema';
@Module({
imports: [MongooseModule.forFeature([{name: Video.name, schema: VideoSchema}])],
providers: [VideoService],
controllers: [VideoController]
})
export class VideoModule {}
+ 환경변수 사용하기
1. Config 설치
npm i @nestjs/config
2. app.module.ts : CofigModule 삽입
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './user/user.module';
import { ConfigModule } from '@nestjs/config';
import { MongooseModule } from '@nestjs/mongoose';
@Module({
imports: [
ConfigModule.forRoot({isGlobal:true}), //git에 중요정보를 올리지 않기 위해 .env 사용 - 다른 모듈에서도 사용가능
MongooseModule.forRoot(process.env.MONGODB_URI), //경로 보이지 않게 설정
UserModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
3. .env 파일 생성 : 최상위 폴더에 존재해야한다. → .gitignore에 추가해주기
MONGODB_URI = "MongoDB 클러스터 주소"
728x90
'Language > Javascript' 카테고리의 다른 글
[Javascript] Ajax 기본 정리 (0) | 2023.02.14 |
---|---|
[Javascript] jQuery 기본 개념 정리 (0) | 2023.02.13 |
[Javascript] 자바스크립트 기본 문법 정리 (0) | 2023.02.13 |