안녕하세요
MongoDB 모델, controller, router 모듈화 하기 본문
서버 파일이 너무 길어져버렸습니다. 코드 정리 방법을 찾을 때가 왔습니다.
1) 우선 스키마와 모델의 모듈화를 합니다.
server.js
아래와 같이 스키마를 정의하고 User를 User Collection에 연결하였습니다.
// MongoDB 연결 설정
mongoose
.connect(mongoURI, {
useNewUrlParser: true,
useUnifiedTopology: true,
})
.then(() => {
console.log("MongoDB에 연결되었습니다.");
})
.catch((error) => {
console.error("MongoDB 연결에 실패했습니다.", error);
});
// Post 모델 스키마 정의
const postSchema = new mongoose.Schema({
postId: { type: Number, required: true, unique: true },
userId: { type: String, required: true },
nickname: { type: String, required: true },
title: { type: String, required: true },
content: { type: String, required: true },
createdAt: { type: String, default: Date.now().toLocaleString("ko-KR") },
isPrivate: { type: Boolean, default: false },
});
const Post = mongoose.model("Post", postSchema);
models를 모아둘 폴더를 만들고 각 모델을 export 해주기 위한 파일을 생성합니다.
Post.js
아래와 같이 스키마와 Post를 그대로 가져와 선언한 뒤 exports 해주면 됩니다.
const mongoose = require("mongoose");
const postSchema = new mongoose.Schema({
postId: { type: Number, required: true, unique: true },
userId: { type: String, required: true },
nickname: { type: String, required: true },
title: { type: String, required: true },
content: { type: String, required: true },
createdAt: { type: String, default: Date.now().toLocaleString("ko-KR") },
isPrivate: { type: Boolean, default: false },
});
const Post = mongoose.model("Post", postSchema);
module.exports = Post;
2) Controller를 모듈화합니다
아래와 같이 Controller를 모아둘 폴더를 만들었습니다.
viewComment.js
모듈화한 Comment 모델을 import 하여 아래와 같이 요청을 함수로 만듭니다.
const Comment = require("../../models/Comment");
const viewComments = async (req, res) => {
console.log(req.path);
try {
const { postId } = req.params;
const comments = await Comment.find({ postId });
if (!comments) {
return res.status(404).json({ message: "댓글을 찾을 수 없습니다." });
}
res.status(200).json(comments);
} catch (error) {
console.error(error);
res.status(500).json({ message: "서버 에러" });
}
};
module.exports = viewComments;
3) Router를 모듈화합니다.
아래와 같이 Router를 기능별로 모아둘 폴더를 만들었습니다.
PostRouter.js
아래와 같이 viewConmments controller를 import하고,
api 주소를 작성한 뒤,
postRouter를 export 해줍니다.
const express = require("express");
const viewComments = require("../controllers/postController/viewComments");
const postRouter = express.Router();
postRouter.get("/:postId/comments", viewComments);
module.exports = postRouter;
4) postRouter를 미들웨어로 만듭니다.
server.js
예를 들어 /api/posts/:postId/comments 로 api 요청이 오게 되면,
postRouter를 거쳐, viewComments 함수를 실행하게 됩니다.
아래와 같이 여러 함수를 생성하여
/api/posts 로 오는 요청을 모아서 관리할 수 있게 되고, 코드의 관리가 용이해졌습니다.
const express = require("express");
const viewPosts = require("../controllers/postController/viewPosts");
const viewPost = require("../controllers/postController/viewPost");
const viewComments = require("../controllers/postController/viewComments");
const postRouter = express.Router();
postRouter.get("/", viewPosts);
postRouter.get("/:postId", viewPost);
postRouter.get("/:postId/comments", viewComments);
module.exports = postRouter;
'데이터시각화-KMG > MongoDB' 카테고리의 다른 글
mongoose로 mongoDB 연결하고 user 생성 테스트하기 (0) | 2023.07.17 |
---|