서버
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 창에 입력하면 원하는 결과값이 나오는 것을 알 수 있다.