[TIL] 블로그 만들기 HW2

김시원·2023년 4월 19일
0

TIL

목록 보기
7/50
post-custom-banner

TIL

Issues encountered

  1. nested try-catch refactoring
  2. nested router 처리하기: https://stackoverflow.com/questions/25260818/rest-with-express-js-nested-router

What I tried

  1. 처음에는 mongoDB의 데이터들을 지우고 업데이트할 수 있는 deleteOne()과 updateOne() functions를 try-catch문 안에 넣어서 해당 함수 처리가 실패하였을 때 catch{}로 넘어가는 식으로 만들어서 nested try-catch문을 사용하게 되었었다.
    => 그러나, 위 두 함수는 Promise 형태이기 때문에 뒤에 .catch()를 통해 에러를 바로 잡을 수 있다.
try {
	const existingPost = await Posts.findOne({ userId, _id: _postId }).exec();
if (!existingPost)
	return res.status(403).json({ errorMessage: "게시글 수정의 권한이 존재하지 않습니다.",});
	try {
		await Posts.updateOne({ userId, _id: _postId }, { $set: { title, content } });

		res.status(200).json({ message: "게시글을 수정하였습니다." });
	} catch (error) {
		console.error(error);
		return res.status(401).json({
		errorMessage: "게시글이 정상적으로 수정되지 않았습니다.",});
	}
} catch (error) {
	console.error(error);
	res.status(400).json({ errorMessage: "게시글 수정에 실패하였습니다." });
}
  1. const router = express.Router({ mergeParams: true });
    이를 각 하위 라우터 파일들에 넣어주면 index.js에서 경로 처리를 할 수 있다.
const express = require("express");
const router = express.Router();
const postsRouter = require("./posts.js");
const usersRouter = require("./users.js");
const commentsRouter = require("./comments.js");

router.use("/users", [usersRouter]);
router.use("/posts", [postsRouter]);
router.use("/posts/:_postId/comments", [commentsRouter]);

module.exports = router;

How I resolved the issues

try {
	const existingPost = await Posts.findOne({userId, _id: _postId,}).exec();
    if (!existingPost)
		return res.status(403).json({
             errorMessage: "게시글 수정의 권한이 존재하지 않습니다.",});
        await Posts.updateOne(
            { userId, _id: _postId },
            { $set: { title, content } }
        ).catch((error) => { // 여기서 catch()로 처리
            console.error(error);
            res.status(401).json({
                errorMessage: "게시글이 정상적으로 수정되지 않았습니다.",
            });
        });
        res.status(200).json({ message: "게시글을 수정하였습니다." });
    } catch (error) {
        console.error(error);
        res.status(400).json({ errorMessage: "게시글 수정에 실패하였습니다." });
    }

What I newly learned

  1. bcrypt: to make 패스워드 more secure by converting the user input 패스워드 into the hashed 패스워드
  2. how to deal with the nested router
  3. Swagger!

What to learn next

  1. Change MongoDB to MySQL
  2. Learn Sequelize
post-custom-banner

0개의 댓글