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는 내 생각대로 짰는데, 다행히 잘 맞는 것 같았다.
'Back > Node.js' 카테고리의 다른 글
Node.js passport 이용한 구글 로그인 (0) | 2021.04.11 |
---|---|
Node.js 친구가 쓴 글만 내려주기 [MongoDB] (0) | 2021.04.08 |
Nodejs 친구목록 친구추가 (0) | 2021.04.03 |
노드js 유저 인증하기 (0) | 2021.04.01 |
Node.js morgan, cookieParser, static (0) | 2021.03.24 |