본문 바로가기
Study Hard/HW

[Only자바스크립트]로 게시판 만들기(1) - 글쓰기 (CRUD)

by 코플+ 2023. 6. 26.

 

No DB로 순수 자바스크립트와
LocalStorage를 사용하여 CRUD 게시판을 만들어보자.

 

글쓰기 구현

 - Form태그로 write_process.html으로 데이터값을 get방식으로 보낸다.

 - write_process.html get방식의 파라미터를 Js로 추출하여 각 값들을 Json형식으로 stringify하여 LocalStorage에 저장한다.

 

 

 

 

 

1. write.html 작성

html소스

  <div id="wrapper">
    <form method="get" action="write_process.html">
      <h1>JS와 LocalStorage로 게시판 만들기</h1>
      제목 <input type="text" name="n_title" value="" required /><br>
      작성자 <input type="text" name="n_writer" value="" required><br>
      내용 <br>
      <textarea name="n_cont" cols="30" rows="10"></textarea><br>
      관련언어<br>
      JS<input type="checkbox" name="n_skil" value="js" checked >
      Java<input type="checkbox" name="n_skil" value="java" >
      Oracle<input type="checkbox" name="n_skil" value="oracle">
      HTML<input type="checkbox" name="n_skil" value="html" ">
      CSS<input type="checkbox" name="n_skil" value="css" "><br>
      <button type="submit">게시글 전송</button>
    </form>
  </div>

 

wirte.html

 

2. write_process.html 작성

html 소스

<html>
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>글쓰기 처리 페이지</title>
</head>
<body></body>
<script src="./write_process.js"></script>
  <script>
    let title = request.getParameter('n_title');
    let writer = request.getParameter('n_writer');
    let cont = request.getParameter('n_cont');
    let skills = request.getParameterValues('n_skil');

    let gul = {
      num : 0, 
      title : title,
      writer : writer,
      cont : cont,
      skills : skills,
      date : (new Date()).toLocaleDateString()
    }

    // localStorage에 저장
    const tblName = "bbs_data";
    let dataArr = []; 
    if(localStorage.getItem(tblName)) {
      dataArr = JSON.parse(localStorage.getItem(tblName));
      gul.num = dataArr[dataArr.length-1].num+1;
    }
    dataArr.push(gul); 

    localStorage.setItem(tblName, JSON.stringify(dataArr));

    alert(`${gul.num} 번째글이 LocalStorage에 저장되었습니다.`);

    location.replace("list.html");
  </script>
</html>

 

write_process.js 소스파일

const request = {}; 
request.getParameter = function(pName) {
  if(location.href.indexOf("?") == -1) return;
 let queryString = location.href.split("?")[1];  // idx 1번째(오른쪽 문자열)이 쿼리스트링
 let items = queryString.split("&");
 
 for(let i = 0; i < items.length; i++) {
   let name = items[i].split("=")[0];
   let val = items[i].split("=")[1];
   if(name == pName) {
     return decodeURIComponent(val);
   }
 }

 return "parameter값이 없습니다. 확인바람";
}

request.getParameterValues = function(pName) {
  if(location.href.indexOf("?") == -1) return;
 let queryString = location.href.split("?")[1];
 let items = queryString.split("&");

 let itemName = [];

 for(let i = 0; i < items.length; i++) {
   let name = items[i].split("=")[0];
   let val = items[i].split("=")[1];
   if(name == pName) {

     itemName.push(decodeURIComponent(val));
   }
 }
 if(!itemName.length) return null; // 0개일때 null 을 리턴해준다.

 return itemName;
}

 

 

 

결과물

다음과 같이 작성하게되면

 

 

- write_process 파일로 쿼리스트링이 전달되고,

- 내부적으로 Js가 LocalStorage에 저장하여 처리합니다.

 

 

- 개발자 도구를 통해서 Application - LocalStorage에 들어가면 다음과 같이 값이 저장된걸 확인할 수 있습니다.

- 쿼리스트링으로 값이 전달되기때문에 띄어쓰기(스페이스)의 경우 값이 +로 변환될 수 있습니다. (parcing을 통해해결)

댓글