[MongoDB] Express.js + Mongoose ODM 폴더 구조, 커넥션 이벤트
글 작성자: 망고좋아
반응형
🎯 Express.js + Mongoose ODM
- Express.js는 프로젝트 구조를 자유롭게 구성할 수 있기 때문에 어느 부분에 Mongoose ODM을 위치시키면 좋을지 적절한 위치를 결정하는 것이 중요하다.
- 일반적으로 models 디렉터리에 Schema와 Model을 같이 위치한다.
- app 객체는 애플리케이션 시작을 의미하는 부분이므로 해당 부분에 데이터베이스 연결을 명시하는 mongoose.connect를 위치해준다.
📝 Mongoose ODM 커넥션 이벤트
- Express.js 애플리케이션은 종료되지 않고 동작하기 때문에 계속해서 데이터베이스가 정상적으로 동작하는지를 파악하기 위해 동작 중에 발생하는 데이터베이스 연결 관련 이벤트에 대한 처리를 하는 것이 좋다.
- 즉, DB가 살아있는지 파악하는 게 중요하다. ⇒ 로그로 남겨 놓는 것이 중요하다.
mongoose.connect('----');
mongoose.connection.on('connected', () => {
});
mongoose.connection.on('disconnected', () => {
});
mongoose.connection.on('reconnected', () => {
});
mongoose.connection.on('reconnectFailed', () => {
});
- connected : 연결 완료
- disconnected : 연결이 끊김
- reconnected : 재연결 완료
- reconnectFailed : 재연결 시도 횟수 초과
📝 실습 :: Mongoose ODM 커넥션 이벤트
🛠 index.js
const express = require('express');
const mongoose = require('mongoose');
// 라우처 추가
const postsRouter = require('./routes/posts');
// express app 생성
const app = express();
// DB 연결
mongoose.connect("mongodb://localhost:27017/exam_7");
// 커넥션 관리 이벤트 :: 연결 확인 log
mongoose.connection.on("connected", () => {
console.log("Successfully connected to MongoDB");
})
app.get('/', (req, res) => {
res.send("OK");
});
// 라우터 이동
app.use('/posts', postsRouter);
app.listen(8080);
🛠 /routes/posts.js
const { Router } = require('express');
const { Post } = require('../models'); // model load
const { pickRandomWord } = require('../utils/random-word');
// 라우터 선언
const router = Router();
// /generate 경로
router.get('/generate', async (req, res, next) => {
const title = pickRandomWord(); //랜덤한 문자열 저장
const content= pickRandomWord();
try {
// Create
const post = await Post.create({
title,
content,
});
res.json(post);
} catch(err) {
next(err);
}
});
// /posts 경로
router.get('/', async (req, res, next) => {
try {
// Post에서 검색을 해서 posts에 저장
const posts = await Post.find({});
// posts에 저장된 내용을 json으로 보내주기
res.json(posts);
} catch(err) {
next(err);
}
});
module.exports = router;
🛠 /models/schemas/post.js
const { Schema } = require('mongoose');
const PostSchema = new Schema({
title: {
type: String,
required: true,
},
content: {
type: String,
required: true,
},
}, {
timestamps: true,
})
module.exports = PostSchema;
🛠 /models/index.js
const mongoose = require('mongoose');
const PostSchema = require('./schemas/post');
exports.Post = mongoose.model('Post', PostSchema);
🛠 /utils/random-word.js
const randomWords = [
'안녕하세요', '반갑습니다', '오히려 좋아', 'express', '재밌다',
'Node.js', '즐겁다', '좋아요', '날씨가', 'MongoDB', '너무 쉽다.',
'elice.io', 'javascript', '배고파요', '심심해요', '치킨을 좋아해요',
];
const pickRandomWord = () => {
randomWords
}
exports.pickRandomWord = () => {
const index = Math.floor(Math.random() * randomWords.length);
return randomWords[index];
}
반응형
'프로그래밍 > DB' 카테고리의 다른 글
[mongoose] find에 대해서 알아보자 (0) | 2021.12.08 |
---|---|
[MongoDB] Mongoose ODM, Mongoose 사용하기, Query, populate (0) | 2021.12.06 |
[MongoDB] MongoDB 기본 개념, 설치, 사용 방법 (0) | 2021.12.06 |
댓글
이 글 공유하기
다른 글
-
[mongoose] find에 대해서 알아보자
[mongoose] find에 대해서 알아보자
2021.12.08 -
[MongoDB] Mongoose ODM, Mongoose 사용하기, Query, populate
[MongoDB] Mongoose ODM, Mongoose 사용하기, Query, populate
2021.12.06 -
[MongoDB] MongoDB 기본 개념, 설치, 사용 방법
[MongoDB] MongoDB 기본 개념, 설치, 사용 방법
2021.12.06