• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Next.js 게시판 next.js 본인의 글만 삭제할 수 있게하는 기능

next.js 본인의 글만 삭제할 수 있게하는 기능

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 글쓴이
  • #107722

    김태훈
    참가자
    <ListItem 코드>
    
    'use client'
    import Link from "next/link"
    export default function ListItem({result}){
      return(
        <div>
          {
            result.map((a, i) => {
              return(
                <div className="list-item" key={i}>
                  <Link href={`/detail/${result[i].title}`}><h4>{result[i].title}</h4></Link>
                  <Link href={`/detail/${result[i]._id}`} className="list-btn">✏️</Link>
                  <span onClick={(e)=>{
                    fetch('/api/post/delete', {
                      method: 'POST',
                      body: result[i]._id
                    })
                    .then(()=>{ 
                      //성공시 실행할코드
                      e.target.parentElement.style.opacity = 0
                      setTimeout(()=>{
                        e.target.parentElement.style.display = 'none'
                      }, 1000)
                    }).catch((error)=>{
                      //인터넷문제 등으로 실패시 실행할코드
                      console.log(error)
                    })
                  }}>🗑️</span>
                  <p>1월 1일</p>
                </div>
              )
            })
          }
        </div>
      )
    }
    
    
    <delete 코드>
    
    
    import { connectDB } from "@/util/database"
    import { ObjectId } from "mongodb"
    import { getServerSession } from 'next-auth'
    import { authOptions } from '../auth/[...nextauth]'
    export default async function handler(request, response){
      
      if(request.method == 'POST'){
        let session = await getServerSession(request, response, authOptions)
        const db = (await connectDB).db("forum")
        let result = await db.collection('post').findOne({ _id : new ObjectId(request.body)})
        try {
          if(session.user.email == result.author){
            await db.collection('post').deleteOne({ _id : new ObjectId(request.body)})
            return response.status(200).json('complete')
          }else{
            return response.status(500).json('error')
          }
          
        } catch (error) {
          console.error('에러 발생:', error);
          return response.status(500).json({ error: '서버 오류가 발생했습니다.' });
        }
      }
    }
    
    
    사용자 정보와 글정보를 비교해서 같다면 삭제하는 기능까진 되는데 json 문구가 나오지않고
    비교한 정보가 같지 않을 때도 삭제성공시의 애니메이션이 발동됩니다 ㅠㅠ 다시 새로고침하면 삭제가 안되어있긴한데
    콘솔창에는 listItem.js:15  POST http://localhost:3000/api/post/delete 500 (Internal Server Error) 이렇게 나와있고
    어떻게 해결해야할지 모르겠어서 질문드립니다 ㅠㅠ
    #107730

    codingapple
    키 마스터
    fetch는 .then 안의 파라미터에서 status 코드 출력해봐야 성공실패여부 알 수 있습니다
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠