해당 글은 이전 글들의 작업을 이어서 진행되고 있는 글입니다.
1. 삭제 버튼 만들기 - list.ejs
<ul class="list-group">
<% for (var i = 0; i < posts.length; i++){ %>
<li class="list-group-item">
<h4> 제목 : <%= posts[i].title %> </h4>
<p> 마감일 : <%= posts[i].date %> </p>
<button style="float: right;" class="delete">삭제</button> //삭제 버튼
</li>
<% } %>
</ul>
2. 삭제버튼 클릭 이벤트 리스너 만들기 - list.ejs
$('.delete').click(function(){
})
3. 이벤트 리스너 내부에 AJAX 사용해서 DELETE 요청 보내기 - list.ejs
💡 AJAX(Asynchronous JavaScript and XML)란?
빠르게 동작하는 동적인 웹 페이지를 만들기 위한 개발 기법의 하나이다.
Ajax는 웹 페이지 전체를 다시 로딩하지 않고도, 웹 페이지의 일부분만을 갱신할 수 있다
즉, Ajax를 이용하면 백그라운드 영역에서 서버와 통신하여, 그 결과를 웹 페이지의 일부분에만 표시할 수 있다.
Ajax를 사용하려면 jQuery를 설치해야한다. 아래의 코드를 body 하단에 작성해보자.
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
이제 2번에서 만든 이벤트 리스너 내부에 Ajax를 사용해보자.
$('.delete').click(function(){
$.ajax({
method: 요청할 메소드 입력(예를 들면 GET/POST/DELETE 등등),
url: 요청할 경로,
data:
}).done(function (result) {
//성공시 실행 할 코드
}).fail(function (error) {
//실패시 실행 할 코드
});
})
이제 위의 기본틀을 기반으로 우리가 직접 코드를 입력해보자.
$('.delete').click(function(){
$.ajax({
method: 'DELETE,
url: /delete,
data: '삭제 버튼을 누른 셀의 게시물의 아이디'
}).done(function (result) {
//성공시 실행 할 코드
}).fail(function (error) {
//실패시 실행 할 코드
});
})
삭제 버튼을 누른 셀의 게시물의 아이디를 알 수 있는 방법은 sever.js를 작성하고 알아보자.
4. 서버에서 ajax로 요청된 경로일 때 삭제하도록 만들기 - server.js
서버에서는 아래와 같은 상황에서 삭제하도록 만들어야한다.
어떤 사람이 /delete 경로로 DELETE 요청을 하면 게시물을 삭제해주세요!
app.delete('/delete', function(request, response){
//게시물 삭제 요청
});
게시물 삭제 요청은 어떻게 해야할까?
우선 3번에서 data 값으로 보낸 값이 request로 온다는 것을 기억해야한다.
그후 우리는 deleteOne이라는 함수를 사용해서 데이터를 삭제하려고 한다.
//deleteOne 기본형식
db.collection('콜렉션 이름').deleteOne( 삭제하려는 데이터, function(error, result){
})
이제 위의 기본틀을 기반으로 우리가 직접 코드를 입력해보자.
db.collection('post').deleteOne( request.body, function(error, result){
console.log('delete complete!');
})
//post라는 콜렉션에서 request.body로 넘어온 데이터를 삭제한다.
이제 위의 코드들을 합쳐본다면 아래와 같다.
app.delete('/delete', function(request, response){
request.body._id = parseInt(request.body._id)
db.collection('post').deleteOne( request.body, function(error, result){
console.log('delete complete!');
})
})
// 1. 누군가 /delete라는 경로로 삭제 요청을 하면 아래의 결과가 실행된다.
// 2. reques.body._id 값을 int로 변경한다.
// 3. post 콜렉션에서 request.body에 있는 값을 찾아서 삭제한다.
🚨 2번코드가 작성된 이유?? 🚨
이 코드가 있는 이유는 AJAX요청 등으로 데이터를 서버에 전송할 떄 숫자 자료들이 가끔 문자화 되는 경우가 있기 때문이다.
5. 삭제 버튼을 누른 셀의 게시물의 아이디를 알아내기 - list.ejs
알아내기 전에 우리는 data-set이라는 것을 알아야한다. 모른다면 이 글을 읽고 오자.
누른 버튼을 파악하기 위해서는 해당 셀에 각각의 id가 부여되어야한다. 이 id를 부여하는 것을 우리는 data-set으로 진행하려고 한다.
따라서 html이 만들어짐에 따라 게시물의 아이디를 data-set id로 넣어주면 된다.
<ul class="list-group">
<% for (var i = 0; i < posts.length; i++){ %>
<li class="list-group-item">
<h4> 제목 : <%= posts[i].title %> </h4>
<p> 마감일 : <%= posts[i].date %> </p>
<button style="float: right;" class="delete" data-id="<%= posts[i]._id %>">삭제</button> //data-set 활용
</li>
<% } %>
</ul>
이제 id를 모두 부여했으니 우리가 삭제 버튼을 클릭했을 때 해당 셀의 id를 가져오면 된다.
해당 기능은 e.target을 통해서 진행해보려고한다. 아래와 같이 코드를 작성하면 e.target을 통해서 id를 가져올 수 있다.
$('.delete').click(function(e){
$.ajax({
method: 'DELETE',
url: '/delete',
data: { _id: e.target.dataset.id} //e.target.dataset.id: 현재 클릭한 셀의 id를 가져온다.
}).done(function (result) {
}).fail(function (error) {
});
location.reload(); //ajax는 새로고침 없이 서버와의 통신이 일어나기 때문에 새로고침을 통해서 HTML를 업데이트 해준다.
})
[실행 화면]
'Server > Node.js' 카테고리의 다른 글
todo 목록 상세페이지만들고 이동시켜보기(detail/1) (0) | 2023.09.03 |
---|---|
AJAX로 삭제 후 UI 변화시키기 (0) | 2023.09.03 |
게시물에 번호 부여하기 (0) | 2023.08.31 |
HTML에 DB데이터 넣는 법(2) - DB데이터 읽기 (1) | 2023.08.30 |
HTML에 DB데이터 넣는 법(1) - EJS (0) | 2023.08.30 |