웹(WEB)/자바스크립트(JS)

Node.js Firebase 연동, 데이터 삭제 deleteDoc

마달랭 2024. 8. 28. 15:03

개요

  1. Node.js Firebase 연동, 데이터 파싱 collection, getDocs
  2. Node.js Firebase 연동, 데이터 파싱(2) getDoc, doc, dayjs
  3. Node.js Firebase 연동, 데이터 추가 Timestamp, addDoc
  4. Node.js Firebase 연동, 데이터 수정 updateDoc

이전 글에서 javascript로 firebase에 데이터를 수정 하는 방법을 공부하였다.

이번 글에서는 firebase에 이미 존재하는 글의 문서를 삭제 해보자

deleteDoc을 통해 게시글을 삭제하는 기능을 구현할 수 있다.

하지만 데이터를 삭제하는 경우에는 매우 조심해야 하기 때문에 권한을 잘 설정하도록 하자

 

javascript 코드 작성

코드 article.js

import { db } from "..\app.js";

import {
    doc, deleteDoc,
} from "https://www.gstatic.com/firebasejs/10.12.2/firebase-firestore.js";

async function deleteArticle(id) { // 문서 id를 매개변수로 받는다.
    try {
        await deleteDoc(doc(db, "articles", id)); // articles 컬렉션에서 id가 id인 문서를 삭제한다.
    } catch (error) {
        return error.code;
    }
}

export { deleteArticle }; // 모듈화

 

 

HTML 코드 작성

delete를 할 경우에는 별도의 html이 필요하지 않기 때문에 글의 상세 내용에서 삭제가 진행되도록 구현하였다.

 

코드 detail.html

<html>
    <body>
        <h1>게시글 상세조회</h1>
        <div>
            <span>id: </span>
            <span class="id-data"></span>
        </div>
        <div>
            <span>title: </span>
            <span class="title-data"></span>
        </div>
        <div>
            <span>content: </span>
            <span class="content-data"></span>
        </div>
        <div>
            <span>createdAt: </span>
            <span class="created-at-data"></span>
        </div>
        <div>
            <span>updatedAt: </span>
            <span class="updated-at-data"></span>
        </div>
        <a class="update-link" href="#">게시글 수정</a>
        <button class="delete-btn">게시글 삭제</button>
        <br />
        <a href="./list.html">게시글 목록으로 돌아가기</a>
        <script src="https://cdn.jsdelivr.net/npm/dayjs@1.11.11/dayjs.min.js"></script>
        <script type="module">
            import {getArticle, deleteArticle} from "./article.js";
            const params = new URLSearchParams(location.search);
            const id = params.get("id");
            const result = await getArticle(id);
            const parsedStep1CreatedAt = new Date(result.createdAt.seconds * 1000);
            const parsedStep1UpdatedAt = new Date(result.updatedAt.seconds * 1000);
            const parsedStep2CreatedAt = dayjs(parsedStep1CreatedAt).format(
                "YYYY.MM.DD HH:mm:ss"
            );
            const parsedStep2UpdatedAt = dayjs(parsedStep1UpdatedAt).format(
                "YYYY.MM.DD HH:mm:ss"
            );
            const id_data = document.querySelector('.id-data');
            const title_data = document.querySelector('.title-data');
            const content_data = document.querySelector('.content-data');
            const created_at_data = document.querySelector('.created-at-data');
            const updated_at_data = document.querySelector('.updated-at-data');
            id_data.textContent = result.id;
            title_data.textContent = result.title;
            content_data.textContent = result.content;
            created_at_data.textContent = parsedStep2CreatedAt;
            updated_at_data.textContent = parsedStep2UpdatedAt;
            
            // 이전의 내용은 파싱의 내용과 동일
			
            // 게시글 삭제 버튼 클래스 참조
            const delete_btn = document.querySelector('.delete-btn');
            // 게시글 삭제 버튼에 이벤트 리스너 추가
            delete_btn.addEventListener('click', async () => {
                if (confirm("삭제 하시겠습니까?")) { // 예 버튼 클릭 시 true 반환
                    // id를 id로 갖는 문서를 삭제한다.
                    await deleteArticle(id);
                    alert("게시글 삭제 완료");
                    // 게시글 목록으로 이동한다.
                    window.location.href = "./list.html";
                }
            });

        </script>
    </body>
</html>

 

결과

게시글 삭제 버튼 클릭 시

 

게시글 삭제가 성공적으로 되었을 경우

 

firestore의 문서가 4개에서 3개로 줄었다.

728x90