개발을 하다보면 늘어나는 api 규칙들을 하나의 파일에서 관리하게 되면 유지보수에도 불합리 하기 때문에 express.Router
를 이용해서 폴더별로 관리해준다.
Router라는 폴더를 생성하고 파일을 생성한다. 나는 post
에 관련 된 파일을 만들 것이기 때문에 post.js
라고 생성하였다.
생성한 파일에 아래의 두 가지를 import
해주고 router를 모듈로써 export 해준다.
<script>
const express = require('express')
const router = express.Router()
module.exports = router
</script>
그리고 index.js
에 있는 app.post
에 관련된 코드들을 post.js
에 들고 와주고 app
부분을 router
로 바꿔준다. 또한 데이터베이스에서 사용하는 Model에 관한 코드도 들고와서 넣어준다.
<script>
const express = require('express')
const router = express.Router()
const { Post } = require("./Model/Post");
const { Counter } = require("./Model/Couter");
router.post("/api/post/submit", (req, res) => {
Counter.findOne({ name: "counter" })
.exec()
.then((counter) => {
req.body.postNum = counter.postNum;
const CommunityPost = new Post(req.body);
CommunityPost.save().then(() => {
Counter.updateOne({ name: "counter" }, { $inc: { postNum: 1 } }).then(
() => {
console.log(req.body);
res.status(200).json({ success: true });
}
);
});
})
.catch(() => {
res.status(400).json({ success: false });
});
});
router.post("/api/post/list", (req, res) => {
Post.find()
.exec()
.then((doc) => {
res.status(200).json({ success: true, postList: doc });
})
.catch(() => {
res.status(400).json({ success: false });
});
});
router.post("/api/post/delete", (req, res) => {
Post.deleteOne({ postNum: Number(req.body.postNum) })
.exec()
.then(() => {
Post.find()
.exec()
.then((doc) => {
res.status(200).json({ success: true, postList: doc });
});
})
.catch(() => {
res.status(400).json({ success: false });
});
});
router.post("/api/post/edit", (req, res) => {
let temp = {
author: req.body.author,
content: req.body.content,
};
Post.updateOne({ postNum: Number(req.body.postNum) }, { $set: temp })
.exec()
.then(() => {
Post.find()
.exec()
.then((doc) => {
res.status(200).json({ success: true, postList: doc });
});
})
.catch(() => {
res.status(400).json({ success: false });
});
});
module.exports = router
</script>
server > index.js
이제 서버의 index.js
파일에서 아까 만든 라우터를 app.use
를 이용하여 import 해준다. 첫번째 주소 입력하는 곳에 router들의 공통된 주소를 아래와 같이 넣어주면 router에서 /api/post/edit
이 아닌 /edit
만을 주소로 사용할 수 있게 된다.
<script>
// 첫번째 요소에는 사용할 api 주소를 넣어준다.
app.use("/api/post", require("./Router/post"));
</script>