version: "3.7"
services:
my-backend:
build:
context: .
dockerfile: Dockerfile
# 양측 파일을 동기화 해주는 옵션
volumes:
- ./index.js:/myfolder/index.js
- ./email.js:/myfolder/email.js
ports:
- 3000:3000
my-database:
image: mongo:5
ports:
- 27017:27017
FROM node:14
WORKDIR /myfolder/
COPY ./package.json /myfolder/
COPY ./yarn.lock /myfolder/
RUN yarn install
COPY . /myfolder/
CMD yarn dev
Node.js와 MongoDB를 위한 ODM(Object Data mapping) 라이브러리
호환성이 없는 JavaScript와 MongoDB의 데이터를 Mapping하여 간편한 CRUD를 가능하게 함
yarn add mongooes
import express from "express";
// mongoose
import mongoose from "mongoose";
const port = 3000;
const app = express();
app.use(express.json());
// 몽고DB 접속
// 앱이 하나의 db만 사용하는 경우 connect
// 추가 연결해야 하는 경우 createConnection 사용
// 네임 리졸루션 - compose.yaml에 사용된 이름을 이용할수 있음
// mydocker : 생성된 db이름
mongoose.connect("mongodb://my-database:27017/mydocker");
// backend API 서버 오픈
app.listen(port, () => {
console.log(`Example app listening on port ${port}`);
}); // 3000번 포트에서 실행
import mongoose from 'mongoose'
네임 리졸루션
docker-compose.yaml 파일에 작성된 각 컨테이너 명을 사용해
두개의 컨테이너를 엮어 줄수 있음
board.model.js
// moogoose 라이브러리를 사용하기 위해 임포트
import mongoose from "mongoose";
// mongoose.schema메서드를 사용하여 mongoose 스키마를 정의
const BoardSchema = new mongoose.Schema({
writer: String,
title: String,
contents: String,
});
// mongoose.model 메서드를 사용하여 스키마를 전달하여 모델 생성
// 첫 번째 인자 : mongoDB내에서 collection 이름을 의미
export const Board = mongoose.model("Board", BoardSchema);
Express index.js
import { Board } from "./models/board.model.js";
app.get("/boards", async (req, res) => {
// find : 모든 데이터를 조회할 때
// findOne : 특정 데이터만 조회
const result = await Board.find();
// 2. 꺼내온 결과 응답 주기
res.send(result);
});
Express index.js
import { Board } from "./models/board.model.js";
app.post("/boards", async (req, res) => {
const board = new Board({
writer: req.body.writer,
title: req.body.title,
contents: req.body.contents,
});
await board.save();
res.send("게시물 등록에 성공하였습니다.!!");