2 글 보임 - 1 에서 2 까지 (총 2 중에서)
-
글쓴이글
-
2023년 7월 7일 01:55 #89942

박건우참가자제멋대로 만들어서 동작은 되는데 중복되는 코드도 많은 것 같고 fetch나 api를 이렇게 많이 써도 되는지 모르겠네요. 문제되는 부분이 없는지 한 번 봐주시면 감사 하겠습니다! << 좋아요 컴포넌트 >> 'use client'
import { useEffect, useState } from "react"export default function Like(props) {let [like, setLike] = useState(0);
let [heart, setHeart] = useState('🤍')useEffect(() => {fetch(`/api/likeapi/b?id=${props._id}`).then((r)=>{return r.json()
})
.then((result)=>{setLike(result);
})
},[like])
useEffect(() => {fetch(`/api/likeapi/c?id=${props._id}`).then((r)=>{return r.json()
})
.then((result)=>{setHeart(result);
})
},[heart])
return (
<div>
<span onClick={()=>{fetch(`/api/likeapi/a?id=${props._id}`)setLike()
setHeart()
}}>{heart} </span><span>{like}</span></div>
)
} << 서버 API a - DB저장 >>
import { getServerSession } from "next-auth"; import { connectDB } from "@/util/database"; import { ObjectId } from "mongodb"; import { authOptions } from "../auth/[...nextauth]";export default async function handler(요청, 응답) {let session = await getServerSession(요청, 응답,authOptions);
if (session) {let client = await connectDB;
let db = client.db('forum');let 찾는거 = await db.collection('like').findOne({name:session.user.name, parent:new ObjectId(요청.query.id)});if (찾는거 == null) {await db.collection('like').insertOne({name:session.user.name, parent:new ObjectId(요청.query.id)});응답.status(200).json('좋아요');} else {await db.collection('like').deleteOne({name:session.user.name, parent:new ObjectId(요청.query.id)});응답.status(200).json('좋아요취소');}
} else {응답.status(500).json('로그인이 필요합니다.')}
} << 서버 API b - 좋아요 개수 가져오기 >> import { connectDB } from "@/util/database"; import { ObjectId } from "mongodb";export default async function handler(요청, 응답) {let client = await connectDB;
let db = client.db('forum');let like = await db.collection('like').find({parent:new ObjectId(요청.query.id)}).toArray();응답.status(200).json(like.length);
} << 서버 API c - 좋아요 이모티콘 변경>> import { getServerSession } from "next-auth"; import { connectDB } from "@/util/database"; import { ObjectId } from "mongodb"; import { authOptions } from "../auth/[...nextauth]";export default async function handler(요청, 응답) {let session = await getServerSession(요청, 응답,authOptions);
if (session) {let client = await connectDB;
let db = client.db('forum');let 찾는거 = await db.collection('like').findOne({name:session.user.name, parent:new ObjectId(요청.query.id)});if (찾는거 == null) {응답.status(200).json('🤍')} else {응답.status(200).json('❤️🔥')}
} else {응답.status(500).json('🤍')}
}
2023년 7월 7일 10:09 #89959
codingapple키 마스터b랑 c 기능 따로 만들어놨는데 나중에 별개로 쓸 일이 없을거같으면 b랑 c는 합쳐놔도 될듯요 좋아요기능과 좋아요취소기능 api는 별개로 만드는게 정확할거같긴합니다
-
글쓴이글
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
- 답변은 로그인 후 가능합니다.
