티스토리 뷰
패키지 설치
$ npm i @nestjs/config
$ npm i @nestjs/mongoose mongoose
$ npm i dotenv @types/dotenv
- 필자는 몽고디비 altas를 사용한다. 그러므로 .env에서 mongodb uri를 불러와야하는데
이때 꼭 필요한 모듈이 @nestjs/config 이다.
process.env.MONGODB_URI 보다는 configService.get<string>('MONGODB_URI') 를 쓰는게 좋다
configs 디렉토리에 module 과 service 생성
- mongodb-config.service.ts
// path: /src/config/mongodb-config.service.ts
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import {
MongooseModuleOptions,
MongooseOptionsFactory,
} from '@nestjs/mongoose';
@Injectable()
export class MongoDBConfigService implements MongooseOptionsFactory {
constructor(private readonly configService: ConfigService) {}
createMongooseOptions(): MongooseModuleOptions {
return {
uri: this.configService.get<string>('MONGODB_URI'),
};
}
}
- mongodb-config.module.ts
// path: /src/config/mongodb-config.module.ts
import { Module } from '@nestjs/common';
import { MongoDBConfigService } from './mongodb-config.service';
@Module({
providers: [MongoDBConfigService],
})
export class MongoDBConfigModule {}
app.module.ts 에 MongooseModule 넣기
import { MongoDBConfigModule } from './config/mongodb-config.module';
import { MongoDBConfigService } from './config/mongodb-config.service';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
MongooseModule.forRootAsync({
useFactory: () => ({uri: process.env.MONGODB_URI})
}),
UsersModule,
...
ConfigModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(LoggerMiddleware).forRoutes();
}
}
스키마 정의 와 주입
- 스키마는 각 엔티티(i.e. produes) 안에 넣는걸로 한다.
src
|
|-products
|_ schemas
| |_ product.schema.ts
|_ products.module.ts
|_ products.service.ts
- product.schema.ts
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import * as mongoose from 'mongoose';
export type ProductDocument = mongoose.HydratedDocument<Product>;
@Schema()
export class Product {
@Prop()
name: string; //상풍명
@Prop()
price: number; // 가격
@Prop()
description: string; //설명글
@Prop([String])
category: string[]; //카테고리
@Prop()
endOrderDate: Date; //주문마감일
@Prop()
buyCountry: string; //구매지역
@Prop()
createdAt: Date;
@Prop()
deletedAt: Date;
}
export const ProductSchema = SchemaFactory.createForClass(Product);
- 서비스에서 스키마 주입
// path: /src/products/products.service.ts
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { Product, ProductDocument } from './schemas/product.schema';
@Injectable()
export class ProductsService {
constructor(
@InjectModel(Product.name) private productModel: Model<ProductDocument>,
) {}
...
}
MongooseModule 주입
// path: /src/products/products.module.ts
import { MongooseModule } from '@nestjs/mongoose';
import { Product, ProductSchema } from './schemas/product.schema';
@Module({
imports: [
// forFeature() : 환경설정역할 -> 모델을 정의
MongooseModule.forFeature([{ name: Product.name, schema: ProductSchema }]),
// MongooseModule.forFeature(....) // Products외 다른 콜렉션을 사용할 때 추가하면된다.
],
controllers: [ProductsController],
providers: [ProductsService],
})
export class ProductsModule {}
Repository 단 분리시키기
[참고]
몽고디비와 몽구스 연결
[NestJS] NestJS에서 MongoDB 연결하기
2020.12.12 - [Language/Javascript] - [Node.js] MongoDB Mac에서 brew로 다운받고 Node.js로 연결하기 [Node.js] MongoDB Mac에서 brew로 다운받고 Node.js로 연결하기 Node.js + Mongodb 조합을 많이 사용한다고 하지만 python 만
cocook.tistory.com
몽고디비 아틀라스 연결
nest js Mongodb Atlas 연결 문제 (환경변수 읽기 문제)
DB를 연결하기 위해 .env 파일에 db 유저와 비밀번호 db name을 작성하고 읽어오려 하였으나 실패1\. 공식 문서에 따라 @Module내의 imports에서 forRoot로 mongodb atlas에 연결 시도 > 실패2\. 문법의 문제일 가
velog.io
래포지토리단 추가하여 구조변경
Nestjs: MongoDB and Mongoose
MongoDB를 사용하는 방법은 크게 두 가지인데 nest에 내장된 TypeORM을 사용하는 방법과 @nestjs/mongoose 패키지를 통해 Mongoose를 사용하는 방법으로 나뉜다. Express에서부터 Mongoose를 사용했기 때문에 이
velog.io
[ 공식다큐먼트] 공식다큐를 읽었는데도... 연결이되지 않아서 구글링 을 했다 ㅠㅠ
Documentation | NestJS - A progressive Node.js framework
Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Progamming), FP (Functional Programming), and FRP (Functional Reac
docs.nestjs.com
Documentation | NestJS - A progressive Node.js framework
Nest is a framework for building efficient, scalable Node.js server-side applications. It uses progressive JavaScript, is built with TypeScript and combines elements of OOP (Object Oriented Progamming), FP (Functional Programming), and FRP (Functional Reac
docs.nestjs.com
'Backend > 꾸준히 TIL' 카테고리의 다른 글
[Node.js] nvm 버젼 변경 (0) | 2022.11.13 |
---|---|
[NestJS] Joi: Cannot read properties of object undefined (0) | 2022.11.12 |
[NestJS] Repository Pattern 적용시키기 (0) | 2022.11.11 |
[NestJS + Logger] Custom Logger 와 winston Logger 적용하기 (0) | 2022.11.09 |
[NestJS] Custom 에러 만들기 와 Exception Filter (0) | 2022.11.08 |
- Total
- Today
- Yesterday
- jest
- nestjs
- RDBMS
- typeORM
- 스마트폰중독
- 참고
- nestjs jest
- git
- MongoDB
- 디지털디톡스
- TDD
- 습관개선
- Jekyll
- 개발용어
- OS
- gem
- node.js
- MySQL
- 바이트디그리
- 미완
- IT용어
- Nest.js
- 한달어스
- 갓생살자
- vscode
- TypeScript
- 한달독서
- 나도 할 수 있다
- 클린아키텍쳐
- Mongoose
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |