자바스크립트/Node JS
[Node JS] 기본 CRUD
KIMJAVAN
2024. 3. 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