Back/Node.js

Node.js 좋아요, MongoDB

Node.js 좋아요, MongoDB

// 좋아요 //
router.post("/like", async (req, res) => {
    const { post_Id } = req.body;
    const { token } = req.headers;
    let post_list = await Post.find({});

    payload = jwt.verify(token, "team2-key");
    const { name } = await User.findOne({ _id: payload.userId });

    let { like_user } = await Post.findOne({ post_Id: post_Id })
    let { like_count } = await Post.findOne({ post_Id: post_Id })

    console.log("=== 좋아요 시작 ===")
    console.log(like_user)
    console.log(name)

    if (like_user.includes(name) == true) {
        like_count = like_count -= 1
        like_user.splice(like_user.indexOf(name), 1);
        await Post.updateOne({ post_Id }, { $set: { like_user, like_count } });
        console.log("좋아요 취소야 !!")
    }
    else if (like_user.includes(name) == false) {
        like_count = like_count += 1
        like_user.push(name)
        await Post.updateOne({ post_Id }, { $set: { like_user, like_count } });
        console.log("좋아요 성공 !!")
    }

    let post_list2 = await Post.find({});
    console.log(post_list2)
    res.send({ post_list: post_list2 })
});

이번 인스타 클론 코딩에서는 프론트랑 호흡을 맞춰서 만들었는데,

 

좋아요나, 팔로워 팔로우등 단순한 CRUD가 아니라 백이나 프론트나 둘다 로직을 짜야할 경우엔 협의를 했어야 했다.

 

내가 혼자 했을 때는 liek_user만 내려주고 프론트단에서 if, else를 써서, 하트가 채워진 상태, 안 채워진 상태를 만들었는데,

 

리액트는 뭔가 다른 개념이 있던 것 같다.

 

새로고침을 안하니까 마지막에도 항상 새로운 정보를 바로 내려줘야했고,

 

현재 접속한 유저 정보를 안 보내주고, 좋아요를 누른 유저 목록만 내려줘도 프론트단에서 알아서 비교했다.

 

DB는 내 생각대로 짰는데, 다행히 잘 맞는 것 같았다.