Today I learned
오늘은 개인과제를 마무리를 하는 날이다 게시글의 좋아요를 구현하고 좋아요를 누른 게시글을 뽑아주는 기능을 구현하는 작업을 진행했다 작업을 진행하면서 경로의 문제가 계속 발생을 했다
/api/posts/likes라는 경로로 GET요청이 들어오면 좋아요를 누른 게시글을 보여줘야 하는데 요청이 들어오지 않고 에러가 발생하는 문제였다
어딘가에서 경로를 뺏어간다고 생각을해서 GET /api/posts/likes를 제외하고 나머지를 주석처리를 하고 진행을 해보니까
정상적으로 작동을 했다 예상대로 위에 경로중 하나가 요청을 가져가 버려서 에러가 발생하는 거였다 그다음 제일 위에
코드부터 주석을 풀어가면서 진행을 하니까 /api/posts/:post_id GET 요청 이부분에서 요청을 가져가서 에러가 발생하는 거였다
이 문제를 해결한 방법은 간단했다 /api/posts/:post_id GET 요청 위에다가 /api/posts/likes GET 요청을 위치시키는 거였다
문제가 발생한 이유가 /api/posts/:post_id GET 요청이 위에있으면 likes가 파라미터로 인식해서 실행이 되다가 에러가 나는 거였다 그래서 순서를 잘 정리해주면 likes가 먼저 걸러지기 때문에 정상적으로 작동한다
// 좋아요 게시글 보기
router.get("/posts/likes", auth_middleware, async (req, res) => {
try {
const user_id = req.decoded.user_id;
const data = await Post.findAll({
attributes: ["id", "title", "content", "date", "likes"],
include: [{
model: Like,
attributes: [],
where: { done: 1, user_id: user_id }
}]
});
res.status(200).json({ data });
} catch (error) {
console.log(error);
res.status(400).json({
msg: "좋아요 게시글 조회에 실패하였습니다."
});
}
});
// 게시글 조회
router.get("/posts/:post_id", async (req, res) => {
const { post_id } = req.params;
const data = await Post.findOne({
attributes: ["id", "title", "content", "date", "likes"],
where: { id: post_id }
});
if (!data) {
return res.status(404).json({
msg: "게시글 조회에 실패하였습니다."
});
}
res.status(200).json({ data });
});
순서를 정리하는 거 말고 파라미터값에 정규식을 지정해서 걸러주는 방식도 있다고 하는데 개인적으로 코드의 순서가 더 우선적이라고 생각해서 순서를 정리하는 방식으로 해결을 했다
오늘 작업을 하면서 배운점은 코드의 순서가 매우 중요하다는 것을 배웠다
순서 따위가 뭐가 중요해 라는 생각이 있었는데 매우 잘못된 생각이었다 코드의 순서는 매우 중요하다 미들웨어를 사용할 때도 오늘 발생한 문제처럼 순서 때문에 발생하는 문제 때문에도 코드의 순서는 매우 중요하다
다음부터는 코드의 순서를 생각하면서 작업을 진행해야겠다
'과거공부모음' 카테고리의 다른 글
나의 개발일지 20221226 TIL(Today I learned) - socket.io (0) | 2022.12.26 |
---|---|
나의 개발일지 WIL(Weekly I learned) 2022-12-25 (0) | 2022.12.26 |
나의 개발일지 2022-12-22 TIL(Today I learned) - 개인과제 (0) | 2022.12.23 |
나의 개발일지 TIL(Today I learned) - Sequelize (0) | 2022.12.21 |
나의 개발일지 TIL(Today I learned) - Access Token, Refresh Token, 미들웨어, SQL, Sequelize (0) | 2022.12.20 |