티스토리 뷰

728x90
반응형

패키지 설치

$ 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

728x90
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함