• 티스토리 홈
  • 프로필사진
    KIMJAVAN
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
KIMJAVAN
  • 프로필사진
    KIMJAVAN
    • 개발 (160)
      • 마크업 언어 (19)
        • HTML (7)
        • CSS (12)
      • 자바스크립트 (85)
        • JavaScript (34)
        • JS Library (6)
        • React (13)
        • threeJS (6)
        • TypeScript (2)
        • Next js (5)
        • Node JS (18)
        • webGL (1)
      • AI (4)
        • chat-gpt (4)
      • flutter (17)
        • dart (11)
        • flutter (6)
      • Sql (3)
      • PHP (4)
      • Python (2)
      • Git (4)
      • vscode (1)
      • 개발 도움 사이트 (7)
      • 작업기록 (1)
      • 오류 모음 (3)
      • 메모장 (7)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [Node JS] 기본 CRUD
        2024년 03월 21일
        • KIMJAVAN
        • 작성자
        • 2024.03.21.오전09:55
        728x90
        const router = require('express').Router()
        const controller = loadModule('basic', 'controller');
        
        router.post('/post', controller.submitPost); //게시글 쓰기
        router.get('/postlist', controller.getPosts); // 게시글 목록을 불러오기
        router.get('/post/:idx', controller.getPostById); //게시글 상세 불러오기
        router.put('/post', controller.updatePost) //게시글 수정하기
        router.put('/postdelete', controller.deletePost) //게시글 삭제하기
        
        module.exports = router

        routes.js

         

        const basicModel = loadModule('basic', 'model')
        const basicController = {};
        const path = require('path');
        
        // 게시글 쓰기
        basicController.submitPost = async (req, res) => {
            try {
                const {writer, title, content} = req.body;
        
                if (!writer || !title || !content) {
                    return res.status(400).json({ error: "글 작성에 필요한 값을 보내주세요." });
                }
        
                const post = await basicModel.submitPost(writer, title, content);
        
                if (!post) {
                    return res.status(503).json({ error: "post 등록 실패" });
                }
        
                return res.status(200).json(post);
            } catch (error) {
                console.error("Error adding post:", error);
                return res.status(500).json({ error: "post 추가 실패" });
            }
        };
        //게시글 목록을 불러오기
        basicController.getPosts = async (req, res) => {
            try {
                const posts = await basicModel.getPosts();
        
                console.log('posts')
                console.log(posts)
                if (posts === null) {
                    return res.status(503).json({ message: "게시글 불러오기 도중 오류 발생" });
                }
        
                return res.status(200).json(posts);
            } catch (error) {
                console.error("Error fetching posts:", error);
                return res.status(500).json({ error: "Failed to fetch posts" });
            }
        };
        
        //게시글 상세 불러오기
        basicController.getPostById = async (req, res) => {
            try {
                const postIdx = req.params.idx;
        
                if (!postIdx) {
                    return res.status(400).send("조회할 게시글의 idx값이 없습니다.");
                }
        
                const post = await basicModel.getPostById(postIdx);
                
                if (!post) {
                    return res.status(503).send("Post not found");
                } 
                return res.status(200).json(post);
                         
            } catch (error) {
                console.error("Error fetching post:", error);
                return res.status(500).json({ error: "Failed to fetch post" });
            }
        };
        
        //게시글 수정하기
        basicController.updatePost = async(req, res) => {
            try {
                const postData = req.body;
        
                //idx가 실존하는지 || 게시글의 status 상태가 Y인지 검증 -------------------
                const postExist = await basicModel.getPostById(postData.idx);
        
                if(!postExist) {
                    return res.status(503).json({ error: "수정할 게시글을 찾을 수 없습니다." })
                }
        
                // 카테고리 수정 -------------------------------------------------------
                const updatedPost = await basicModel.updatePost(postData);
        
                if (!updatedPost) {
                    return res.status(503).json({ error: "게시글 수정하기 실패" });
                }
        
                console.log(`${updatedPost.idx}의 정보 수정 성공`)
        
                return res.status(200).json(updatedPost);
            } catch (error) {
                console.error("Error updating post:", error);
                return res.status(500).json({ error: "Failed to update post" });
            }
        };
        
        //게시글 삭제하기
        basicController.deletePost = async(req, res) => {
            try {
                const deleteIdxsList = req.body.idxs;
        
                if (deleteIdxsList.length === 0) {
                    return res.status(400).json({error: '삭제할 카테고리 아이템이 없습니다.'});
                }
        
                // deleteIdsList 배열에 있는 각 faq_id를 사용하여 해당 행의 faq_status를 "취소"로 업데이트합니다.
                for (const idx of deleteIdxsList) {
                    const deletedResult = await basicModel.deletePost(idx);
        
                    if(!deletedResult){
                        return res.status(503).json({ error: `${idx}번 째 게시글 삭제 실패` });
                    }
                }
        
                return res.status(200).json({ message: '게시글이 성공적으로 삭제되었습니다.' });
            } catch (error) {
                console.error("Error deleting post:", error);
                return res.status(500).json({ error: "Failed to delete post" });
            }
        };
        
        // ... 다른 컨트롤러 함수들 ...
        
        module.exports = basicController;

        controller.js

         

        const basicModel = {};
        const db = database();
        const currentDateTime = new Date();
        currentDateTime.setHours(currentDateTime.getHours() + 9);
        
        // 공지 작성하기(쓰기)v
        basicModel.submitPost = async (writer, title, content) => {
            let postId = null;
        
            await db('wb_basic').insert({
                writer: writer,
                title: title,
                content: content,
                status: 'Y',
                reg_datetime: currentDateTime,
                upd_datetime: currentDateTime
            })
            .then((newId) => {
                postId = newId;
            })
            .catch((e) => {
                console.log(e);
                postId = null;
            });
        
            return postId;
        };
        //게시글 목록을 불러오기
        basicModel.getPosts = async (page=0) => {
            let postlist = null;
        
            await db
                .select('*')
                .from('wb_basic')
                .where('status', "Y")
                .then(rows => {
                    postlist = (rows.length > 0) ? rows : [];
                })
                .catch((e) => {
                    console.log(e);
                    postlist = null;
                });
        
            return postlist;
        };
        
        //게시글 상세 불러오기
        basicModel.getPostById = async (idx) => {
            let postById = null;
        
            await db
                .select('*')
                .from('wb_basic')
                .where('idx', idx)
                .andWhere('status','Y')
                .limit(1)
                .then(rows => {
                    postById = (rows.length > 0) ? rows[0] : null;
                })
                .catch((e) => {
                    console.log(e);
                    postById = null;
                });
            return postById;
        };
        
        //게시글 수정하기
        basicModel.updatePost = async (postData) => {
            await db('wb_basic')
                .where('idx', postData.idx)
                .andWhere('status', 'Y')
                .update({
                    writer: postData.writer,
                    title: postData.title,
                    content: postData.content,
                    upd_datetime: currentDateTime
                })
                .catch((e) => {
                    console.log(e);
                    return null;
                });
        
            // 업데이트된 내용(id와 title)을 반환합니다.
            return await basicModel.getPostById(postData.idx); // 또는 필요에 따라 업데이트된 내용 반환
        }
        
        //게시글 삭제하기
        basicModel.deletePost = async (idx) => {
            await db('wb_basic')
                .where('idx', idx)
                .andWhere('status', 'Y')
                .update({
                    status: 'N',
                    exp_datetime: currentDateTime
                })
                .catch((e) => {
                    console.log(e);
                    return false;
                });
        
            return true; // 또는 필요에 따라 업데이트된 내용 반환
        }
        module.exports = basicModel;

        model.js

        저작자표시 비영리 변경금지 (새창열림)

        '자바스크립트 > Node JS' 카테고리의 다른 글

        [NodeJS] select from 순서  (0) 2024.04.01
        [NodeJS] req, res  (0) 2024.04.01
        [Node JS] 기본 개념 정리  (0) 2024.01.24
        [Node JS] put - controller  (0) 2024.01.19
        [Node JS] try catch / then catch  (0) 2024.01.16
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바

        단축키

        내 블로그

        내 블로그 - 관리자 홈 전환
        Q
        Q
        새 글 쓰기
        W
        W

        블로그 게시글

        글 수정 (권한 있는 경우)
        E
        E
        댓글 영역으로 이동
        C
        C

        모든 영역

        이 페이지의 URL 복사
        S
        S
        맨 위로 이동
        T
        T
        티스토리 홈 이동
        H
        H
        단축키 안내
        Shift + /
        ⇧ + /

        * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.