이번에는 CRUD의 마지막 기능 Delete 기능을 구현해보자!
파일 목록
📦Board
┣ 📂board
┃┣ 📜list.html
┃ ┣ 📜modify.html
┃ ┣ 📜view.html
┃ ┗ 📜write.html
┣ 📂public
┃ ┗ 📂js
┃ ┃ ┣ 📜list.js
┃ ┃ ┣ 📜modify.js
┃ ┃ ┣ 📜view.js
┃ ┃ ┗ 📜write.js
┗ 📜index.html
구현
구현해야 할 사항은 크게 다음과 같다.
게시물 작성하기 (Create)리스트로 게시물 보여주기 (Read)게시물 클릭 시 해당 게시물 보여주기 (Read)게시물 수정하기 (Update)- 게시물 삭제하기 (Delete)
게시판 구현하기
게시판 구조

게시물 삭제하기 (Delete)
Delete 기능은 view.js 파일에서 구현할 예정이다.
delete.js 파일을 따로 만들지 않은 이유는 view 페이지에서 삭제하고 list 페이지로 넘어가기만 하면 되는데 따로 파일을 만들 이유가 없다고 개인적으로 생각을 했기 때문이다.
# public/js/view.js
제일 먼저 view 페이지의 삭제 버튼을 선택해 보자!
이전 코드에서 작업을 진행한다.
const boardsStr = localStorage.getItem("boards");
const boardsObj = JSON.parse(boardsStr);
const idx = location.search;
const index = idx.split("=")[1];
const board = boardsObj[index];
const beforeUrl = document.referrer;
// 조회수
const viewCount = (beforeUrl) => {
if (beforeUrl.split("/").pop() === "list.html") {
board.views++;
const viewCountStr = JSON.stringify(boardsObj);
localStorage.setItem("boards", viewCountStr);
}
};
viewCount(beforeUrl);
// 데이터 출력
const viewFrm = document.querySelectorAll("#viewFrm > div");
for (let i = 0; i < viewFrm.length; i++) {
const id = viewFrm[i].id;
viewFrm[i].innerHTML += " " + board[id];
}
// 수정 버튼
const modifyBtn = document.querySelector("#modify");
const modifyBtnHandler = (e) => {
location = "/board/modify.html" + idx;
};
modifyBtn.addEventListener("click", modifyBtnHandler);
// 삭제 버튼
const deleteBtn = document.querySelector("#delete");
console.log(deleteBtn);

이제 삭제 버튼에 클릭 이벤트를 걸어보자!
const boardsStr = localStorage.getItem("boards");
const boardsObj = JSON.parse(boardsStr);
const idx = location.search;
const index = idx.split("=")[1];
const board = boardsObj[index];
const beforeUrl = document.referrer;
// 조회수
const viewCount = (beforeUrl) => {
if (beforeUrl.split("/").pop() === "list.html") {
board.views++;
const viewCountStr = JSON.stringify(boardsObj);
localStorage.setItem("boards", viewCountStr);
}
};
viewCount(beforeUrl);
// 데이터 출력
const viewFrm = document.querySelectorAll("#viewFrm > div");
for (let i = 0; i < viewFrm.length; i++) {
const id = viewFrm[i].id;
viewFrm[i].innerHTML += " " + board[id];
}
// 수정 버튼
const modifyBtn = document.querySelector("#modify");
const modifyBtnHandler = (e) => {
location = "/board/modify.html" + idx;
};
modifyBtn.addEventListener("click", modifyBtnHandler);
// 삭제 버튼
const deleteBtn = document.querySelector("#delete");
const deleteBtnHandler = (e) => {
console.log(e.target);
};
deleteBtn.addEventListener("click", deleteBtnHandler);

쿼리 스트링으로 전달받은 인덱스를 이용해 버튼을 클릭하면 해당하는 데이터를 splice로 삭제해보자!
const boardsStr = localStorage.getItem("boards");
const boardsObj = JSON.parse(boardsStr);
const idx = location.search;
const index = idx.split("=")[1];
const board = boardsObj[index];
const beforeUrl = document.referrer;
// 조회수
const viewCount = (beforeUrl) => {
if (beforeUrl.split("/").pop() === "list.html") {
board.views++;
const viewCountStr = JSON.stringify(boardsObj);
localStorage.setItem("boards", viewCountStr);
}
};
viewCount(beforeUrl);
// 데이터 출력
const viewFrm = document.querySelectorAll("#viewFrm > div");
for (let i = 0; i < viewFrm.length; i++) {
const id = viewFrm[i].id;
viewFrm[i].innerHTML += " " + board[id];
}
// 수정 버튼
const modifyBtn = document.querySelector("#modify");
const modifyBtnHandler = (e) => {
location = "/board/modify.html" + idx;
};
modifyBtn.addEventListener("click", modifyBtnHandler);
// 삭제 버튼
const deleteBtn = document.querySelector("#delete");
console.log(boardsObj);
const deleteBtnHandler = (e) => {
boardsObj.splice(index, 1);
console.log(boardsObj);
};
deleteBtn.addEventListener("click", deleteBtnHandler);

0번째 인덱스에 해당하는 값이 잘 지워지는 걸 확인할 수 있다.
이번에는 인덱스 값을 앞으로 한 칸씩 당겨주자!
const boardsStr = localStorage.getItem("boards");
const boardsObj = JSON.parse(boardsStr);
const idx = location.search;
const index = idx.split("=")[1];
const board = boardsObj[index];
const beforeUrl = document.referrer;
// 조회수
const viewCount = (beforeUrl) => {
if (beforeUrl.split("/").pop() === "list.html") {
board.views++;
const viewCountStr = JSON.stringify(boardsObj);
localStorage.setItem("boards", viewCountStr);
}
};
viewCount(beforeUrl);
// 데이터 출력
const viewFrm = document.querySelectorAll("#viewFrm > div");
for (let i = 0; i < viewFrm.length; i++) {
const id = viewFrm[i].id;
viewFrm[i].innerHTML += " " + board[id];
}
// 수정 버튼
const modifyBtn = document.querySelector("#modify");
const modifyBtnHandler = (e) => {
location = "/board/modify.html" + idx;
};
modifyBtn.addEventListener("click", modifyBtnHandler);
// 삭제 버튼
const deleteBtn = document.querySelector("#delete");
console.log(boardsObj);
const deleteBtnHandler = (e) => {
boardsObj.splice(index, 1);
for (let i = 0; i < boardsObj.length; i++) {
boardsObj[i].index = i;
}
console.log(boardsObj);
};
deleteBtn.addEventListener("click", deleteBtnHandler);

이제 이걸 localStorage에 반영하자!
const boardsStr = localStorage.getItem("boards");
const boardsObj = JSON.parse(boardsStr);
const idx = location.search;
const index = idx.split("=")[1];
const board = boardsObj[index];
const beforeUrl = document.referrer;
// 조회수
const viewCount = (beforeUrl) => {
if (beforeUrl.split("/").pop() === "list.html") {
board.views++;
const viewCountStr = JSON.stringify(boardsObj);
localStorage.setItem("boards", viewCountStr);
}
};
viewCount(beforeUrl);
// 데이터 출력
const viewFrm = document.querySelectorAll("#viewFrm > div");
for (let i = 0; i < viewFrm.length; i++) {
const id = viewFrm[i].id;
viewFrm[i].innerHTML += " " + board[id];
}
// 수정 버튼
const modifyBtn = document.querySelector("#modify");
const modifyBtnHandler = (e) => {
location = "/board/modify.html" + idx;
};
modifyBtn.addEventListener("click", modifyBtnHandler);
// 삭제 버튼
const deleteBtn = document.querySelector("#delete");
const deleteBtnHandler = (e) => {
boardsObj.splice(index, 1);
for (let i = 0; i < boardsObj.length; i++) {
boardsObj[i].index = i;
}
const setBoardsStr = JSON.stringify(boardsObj);
localStorage.setItem("boards", setBoardsStr);
};
deleteBtn.addEventListener("click", deleteBtnHandler);

마지막으로 삭제 버튼을 누르면 list 페이지로 이동하게 해 보자!
방금 데이터는 삭제되었기 때문에 list 페이지에서 새로운 게시글을 선택해서 view 페이지로 온 다음 작업을 진행하자!
const boardsStr = localStorage.getItem("boards");
const boardsObj = JSON.parse(boardsStr);
const idx = location.search;
const index = idx.split("=")[1];
const board = boardsObj[index];
const beforeUrl = document.referrer;
// 조회수
const viewCount = (beforeUrl) => {
if (beforeUrl.split("/").pop() === "list.html") {
board.views++;
const viewCountStr = JSON.stringify(boardsObj);
localStorage.setItem("boards", viewCountStr);
}
};
viewCount(beforeUrl);
// 데이터 출력
const viewFrm = document.querySelectorAll("#viewFrm > div");
for (let i = 0; i < viewFrm.length; i++) {
const id = viewFrm[i].id;
viewFrm[i].innerHTML += " " + board[id];
}
// 수정 버튼
const modifyBtn = document.querySelector("#modify");
const modifyBtnHandler = (e) => {
location = "/board/modify.html" + idx;
};
modifyBtn.addEventListener("click", modifyBtnHandler);
// 삭제 버튼
const deleteBtn = document.querySelector("#delete");
const deleteBtnHandler = (e) => {
boardsObj.splice(index, 1);
for (let i = 0; i < boardsObj.length; i++) {
boardsObj[i].index = i;
}
const setBoardsStr = JSON.stringify(boardsObj);
localStorage.setItem("boards", setBoardsStr);
location.href = "/board/list.html";
};
deleteBtn.addEventListener("click", deleteBtnHandler);

이로써 게시판 구현하기가 끝이 났다!!!
실제 게시판은 데이터 베이스를 이용하겠지만 아직 데이터 베이스를 배우지 않아서 브라우저의 localStorage를 이용해서 게시판을 구현해 보았다.
나중에 데이터 베이스를 배우고 나면 데이터 베이스를 이용해서 게시판을 구현해 보자!
게시판 구경하기
최종 결과물 👈 클릭
# 실행결과 로컬에서는 새로고침을 해도 조회수가 올라가지 않았는데 조회수가 올라가는 문제가 있다.
# 이 부분을 수정해봐야겠다.
'Javascript' 카테고리의 다른 글
| [Javascript] 게시판 구현하기 (CRUD) - 코드 수정 (1) | 2022.11.22 |
|---|---|
| [Javascript] 게시판 구현하기 (CRUD) - Update (0) | 2022.11.21 |
| [Javascript] 게시판 구현하기 (CRUD) - Read (0) | 2022.11.20 |
| [Javascript] 게시판 구현하기 (CRUD) - Create (0) | 2022.11.19 |
| [Javascript] 댓글 구현하기 (Create, Read) (2) | 2022.11.16 |
