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

Node.js Firebase 연동, 데이터 추가 Timestamp, addDoc

마달랭 2024. 8. 28. 14:20
반응형

개요

  1. Node.js Firebase 연동, 데이터 파싱 collection, getDocs
  2. Node.js Firebase 연동, 데이터 파싱(2) getDoc, doc, dayjs

addDoc는 firebase에 새로운 문서를 추가할 수 있는 메서드이다.

게시글을 생성할 경우 해당 게시글에 대한 정보를 firebase의 문서로 추가할 수 있다.

 

javascript 코드 작성

코드 article.js

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

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

async function createArticle(title, content) { // 게시글의 제목과 내용을 매개변수로 받아온다.
    // 현재 시간을 timestamp 형식으로 변환하여 저장한다.
    const timestamp = Timestamp.fromDate(new Date());
    const newArticle = { // firebase에 추가해 줄 객체를 생성해 준다.
        title: title,
        content: content,
        createdAt: timestamp,
        updatedAt: timestamp,
    };
    try {
    	// articles 컬렉션에 newArticle 객체에 저장된 정보를 문서로 추가한다.
        // id의 경우 기존 firestore 세팅에서 랜덤 생성으로 지정하였으므로 난수로 생성된다.
        const docRef = await addDoc(collection(db, "articles"), newArticle);
        return docRef.id; // 성공적으로 문서가 성공되었을 경우 id를 반환해 준다.
    } catch (error) {
        return error.code;
    }
}

export { createArticle }; // 모듈화

 

 

HTML 코드 작성

코드 create.html

<html>
    <body>
        <h1>게시글 생성</h1>
        <div class="input-group">
            <div>
                <input class="title-input" type="text" placeholder="제목을 입력하세요" />
            </div>
            <div>
                <textarea class="content-textarea" placeholder="내용을 입력하세요"></textarea>
            </div>
            <button class="add-btn">등록</button>
        </div>
        <div>
            <a href="./list.html">게시글 목록으로 돌아가기</a>
        </div>

        <script type="module">
            import { createArticle } from "./article.js";
            	// title 입력 input 정보 참조
                const titleInput = document.querySelector(".title-input");
                // content 상동
                const contentTextarea = document.querySelector(".content-textarea");
                const addBtn = document.querySelector(".add-btn");
                // 등록 버튼에 이벤트 리스너 할당
                addBtn.addEventListener("click", async () => {
                    if ( // title과 content에 null 값이 추가되지 않도록 한다.
                        !titleInput.value ||
                        titleInput.value.trim() === "" ||
                        !contentTextarea.value ||
                        contentTextarea.value.trim() === ""
                    )
                        return;
                    // 값들을 좌우 공백을 제거하여 받아온다.
                    const parsedTitle = titleInput.value.trim();
                    const parsedContent = contentTextarea.value.trim();
                    // createArticle 메서드에 생성할 제목과 내용 전달
                    const result = await createArticle(parsedTitle, parsedContent);
                    alert("글 생성 성공");
                    // 작성한 글 정보로 이동한다. result에는 새로 생성한 글의 id가 저장되어 있다.
                    location.href = `./detail.html?id=${result}`;
                });
        </script>
    </body>
</html>

 

결과

 

firestore에 성공적으로 데이터가 추가된 점을 볼 수 있다.

728x90
반응형