게시판 구현 ( 댓글 기능 추가, 페이징, 게시글 수정, 게시글 삭제, 이미지 수정 )
게시글 상세보기 기능 추가
<%- include ("../default/header") %>
<div class="content wrap">
<div style="width:600px; margin: 0 auto;">
<h3 style="text-align: center; margin-bottom: 10px;"> - 개 인 정 보 - </h3>
<table border="1" align="center">
<tr>
<th width="100">글 번호</th> <td width="200"><%= data.WRITE_NO %></td>
<th width="100">작성자</th> <td width="200"><%= data.ID %></td>
</tr>
<tr>
<th>제목</th> <td><%= data.TITLE %></td>
<th>등록일자</th> <td><%= data.SAVE_DATE %></td>
</tr>
<tr>
<th>내용</th><td><%= data.CONTENT %></td>
<td colspan="2">
<% if( data.ORIGIN_FILE_NAME === "nan"){%>
<b>이미지가 없습니다
<%}else{%>
<b>이미지 : <%=data.ORIGIN_FILE_NAME%> </b>
<%}%>
</td>
</tr>
<tr>
<td colspan="4" align="center">
<%if(username === data.ID){%>
<input type="button" onclick="" value="수정하기">
<input type="button" onclick="" value="삭제하기">
<%}%>
<input type="button" onclick="" value="답글달기">
<input type="button" onclick="" value="리스트로 돌아가기">
</td>
</tr>
</table>
</div>
</div>
data.ejs 코드
게시글 상세보기 기능 구현 완료
이미지 출력 구현
글에 들어가면 이미지 출력 구현 완료
글 조회수 기능 추가
조회수 증가 기능 구현 완료
글 삭제 기능 구현
글 삭제 구현 완료
글 수정 기능 구현
<%- include ("../default/header") %>
<script src="/static/js/image_read.js"></script>
<div class="content wrap">
<div style="width:300px; margin: 0 auto;">
<form action="/board/modify" enctype="multipart/form-data" method="post" >
<input type="hidden" name="write_no" value="<%=data.WRITE_NO%>">
<input type="hidden" name="change_file_name" value="<%=data.CHANGE_FILE_NAME%>">
<input type="hidden" name="origin_file_name" value="<%=data.ORIGIN_FILE_NAME%>">
제목 <input type="text" size="30" name="title" value="<%=data.TITLE%>"><hr>
내용 <textarea rows="5" cols="30" name="content"><%=data.CONTENT%></textarea>
<hr>
<img width="200px" height="100px" id="img"
src="/board/download/<%=data.CHANGE_FILE_NAME%>">
<input type="file" name="image_file_name" onchange="readURL(this)">
<hr>
<input type="submit" value="수정하기">
<input type="button" onclick="history.back()" value="이전으로 돌아가기">
</form>
</div>
</div>
modify_form.ejs 코드
게시글 수정 구현 완료
페이징 기능 구현
<% if( start <= 1){ %>
<button disabled>이전</button>
<%}else{%>
<button type="button" onclick="
location.href='/board/list?start=<%=start - 1%>'">이전</button>
<% }for(let i=1 ; i <= totalPage ; i++ ){ %>
<a href="/board/list?start=<%= i %>"><%= i %></a>
<% }if( start < totalPage ){%>
<button type="button" onclick="
location.href='/board/list?start=<%=start + 1%>'">다음</button>
<% }else{ %> <button disabled>다음</button> <% } %>
<%= start %> / <%= totalPage %>
추가 코드
페이징 구현 완료
댓글 기능 구현
create table reply(
id varchar(20),
title varchar(50),
content varchar(300),
write_group number(10),
save_date date default sysdate,
constraint fk_test1 foreign key(write_group) references board(write_no) on delete cascade,
constraint fk_test2 foreign key(id) references members(id) on delete cascade
);
db에 sql 문 실행
#modal_wrap{
display: none; position: fixed; z-index: 9;
margin: 0 auto; top:0; left: 0; right: 0;
width:100%; height:100%;
background-color: rgba(0, 0, 0, 0.4);
}
#first{
position: fixed; z-index: 10; margin: 0 auto;
top:30px; left: 0; right: 0; display:none;
background-color: rgba(212, 244, 250, 0.9);
height:350px; width:300px;
}
reply.css 코드
function reply_form(){
$("#first").slideDown('slow');
$("#modal_wrap").show();
}
function reply_hide(){
$("#first").slideUp('fast');
$("#modal_wrap").hide();
}
function rep(){
let form={};
let arr = $("#frm").serializeArray();
arr.forEach( d => { form[d.name] = d.value; })
fetch("/boardrep/register", {
method : "post",
headers : {"Content-Type" : "application/json"},
body : JSON.stringify( form )
})
.then(res => res.json() )
.then( result => {
if(result === 1)
alert("답글이 달렸습니다!!")
reply_hide();
})
}
reply.js 코드
<link href="/static/css/reply.css" rel="stylesheet" >
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="/static/js/reply.js"></script>
<div id="modal_wrap">
<div id="first">
<div style="width:250px;margin: 0 auto;padding-top: 20px;">
<form id="frm">
<input type="hidden" name="write_no" value="<%= data.WRITE_NO %>">
<input type="hidden" name="id" value="<%= username %>">
<b>답글 작성 페이지</b> <hr>
<b>작성자 : <%= username %></b> <hr>
<b>제목</b><br><input type="text" size="30" name="title"><hr>
<b>내용</b><br>
<textarea name="content" rows="5" cols="30"></textarea>
<hr>
<button type="button" onclick="rep()">답글</button>
<button type="button" onclick="reply_hide()">취소</button>
</form>
</div>
</div>
</div>
reply_form.ejs 코드
function init( groupNum ){
fetch(`/boardrep/replyData/`+groupNum )
.then( res => res.json() )
.then( data => {
let html = ""
data.forEach((d)=>{
html += "<div align='left'><b>아이디 : </b>"+d.ID+"님 / ";
html += "<b>작성일</b> : "+d.SAVE_DATE+"<br>"
html += "<b>제목</b> : "+d.TITLE+"<br>"
html += "<b>내용</b> : "+d.CONTENT+"<hr></div>"
});
const content = document.getElementById("content");
content.innerHTML = html;
});
}
reply_view.js 코드
현재는 답글 달면 새로고침 하기 전에 보이지 않는데 바로 댓글 입력한 데이터를 바로 출력하게끔 입력 받은 값을 덧붙여서 출력 ( 새로 고침을 하게 되면 DB 에서 끌고온 데이터가 출력되며, 이 방법은 일시적으로 데이터를 출력할 뿐 )
댓글 기능 구현 완료
코드 실행
'BE > Node.js' 카테고리의 다른 글
[Node.js] 게시판 구현 1 ( 페이징, 게시글 작성 ) (0) | 2024.04.08 |
---|---|
[Node.js] css 파일, script 파일을 분리하여 관리 (0) | 2024.04.05 |
[Node.js] 파일(이미지) 업로드, 다운로드, 수정, 삭제 (0) | 2024.04.05 |
[Node.js] get, post, put, delete (0) | 2024.04.05 |
[Node.js] 암호화, fetch, spa (1) | 2024.04.04 |