서버

nodejs 에서 mongodb 연결하기 (with docker)

고태광이 2020. 3. 28. 23:48

본격적으로 들어가기전에 나는 도커를 아래와 같이 구성했다

version: "3.7"     # version 정보를 작성합니다.

services:           # service 목록을 정의합니다.
  node:             # service의 이름입니다.
    image: rhxorhkd/testnode:1.0  # 해당 service에서 사용할 image입니다.
    links:                  # 컨테이너 간의 연걸
      - mongodb             # mongodb와 연결 
    restart: always         # container를 실행할 때 항상 이미 수행중이라면 재시작을 수행합니다.
    container_name: "node"  # container의 name을 정의합니다.
    ports:                  # service port를 정의합니다.
      - "3000:3000"         # local:container
    depends_on:             # 실행순서를 설정한다. (mongodb시작 후 실행)
      - mongodb
  mongodb:          # service의 이름입니다.
    image: mongo    # 해당 service에서 사용할 image입니다.
    restart: always # container를 실행할 때 항상 이미 수행중이라면 재시작을 수행합니다.
    #environment:    # 환경변수를 정의합니다.
     # MONGO_INITDB_ROOT_USERNAME: root
     # MONGO_INITDB_ROOT_PASSWORD: P@ssw0rd
    volumes:        # container -> local로 mount할 수 있습니다.
      - type: bind 
        source: /Users/kotaekwang/Documents/kuzal/db # local 경로
        target: /data/db  # container 내부에서의 경로
    container_name: "mongo" # container의 name을 정의합니다.
    ports:                # service port를 정의합니다.
      - "27017:27017"     # local:container

 

 

mongoose 모듈 다운 

npm install --save mongoose

 

nodejs 프로젝트 내에 mongoose 세팅 코드 작성

//   ./conf/db.js

const mongoose = require('mongoose');

mongoose.connect('mongodb://mongo:27017/kuzal',
    {useUnifiedTopology : true, useNewUrlParser: true});

const db = mongoose.connection;

db.on("error", () => {
    console.log("> error occurred from the database");
});
db.once("open", () => {
    console.log("> successfully opened the database");
});

module.exports = mongoose;

mongoose.connect 뒤 url에서 mongo는 컨테이너 이름 

 

테스트 스키마 작성

//  ./models/test

const mongoose = require('../conf/db');

const testSchema = mongoose.Schema({
    name : String
});

module.exports = mongoose.model('test', testSchema);

 

라우트 작성 (나는 /test 로 요청할 경우 test 컬렉션 안에 데이터들을 전송하기로 하였다)

// ./router/index.js

router.get('/test', function(req, res) {

 Test.find(function(err, tests) {

    if(err) {
        console.log("failed to get");
    }

    res.json(tests);
  })
});

 

그리고 전 게시물에서 배운 docker-compose up -d 를 실행해준다. 

 

url 창에 입력하면 원하는 결과값이 나오는 것을 알 수 있다.