Chatterbox Client 만들어보기
여러 사용자들과 같이 채팅을 할 수 있는 chat application의 클라이언트 부분을 만들어보자.
서버를 이용하여 간단한 클라이언트를 구현해보자
fetchAPI
를 활용하여 서버에 메서지를 요청하고(GET), 메세지를 보내게(POST)하는 기능을 만들어보자. 서버는 이미 AWS에 구축/배포되어 있는 서버를 사용하였다.
Chatterbox Client Repository
HTML 구성 및 작동
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>chatterbox</title>
<link rel="stylesheet" href="styles/styles.css">
</head>
<body>
<div id="main">
<h1>chatterbox</h1>
<div id="send">
<form class="submit">
<input type="text" class="inputUser" />
<textarea class="inputChat"></textarea>
<button class="postbtn" type="submit">Post</button>
<button class="clearbtn" type="submit">Clear</button>
</form>
</div>
</div>
<div id="chats"></div>
<!-- your scripts -->
<script src="scripts/app.js"></script>
</body>
</html>
매우 심플한 구성이다. 상단의 inputbox
와 textarea
에 각각 이름과 작성하고 싶은 내용을 적고 POST
버튼을 클릭하면 다음과 같이 하단의 목록에 추가되면서 json
타입으로 서버로 전송된다.
그리고 Clear
버튼을 누르면 해당 알림창과 함께 모든 채팅 목록과 서버에 저장되어 있는 데이터들까지 한꺼번에 삭제한다.
JavaScript Code
사용하기 편하게 Singleton
패턴으로 작성하였다.
const githubID = 'Jeong-HW'
const app = {
server: `http://3.36.72.17:3000/${githubID}/messages`,//서버 주소값
init: () => { //서버의 데이터값들을 불러와서 화면에 뿌려준다
// TODO
app.fetch().then(data => {
for (let message of data) {
app.renderMessage(message);
}
})
},
fetch: () => { //서버에서 받은 응답의 body속 JSON을 리턴한다
// TODO
return window.fetch(app.server)
.then((response) => response.json());
},
send: (message) => { //서버로 데이터를 전송해준다
window.fetch(app.server, {
method: 'POST',
body: JSON.stringify(message),
headers: {
'Content-Type': 'application/json'
},
})
.then(response => response.json())
},
clearMessages: () => { //화면 내 채팅목록에 있는 메시지들를 지워준다
document.querySelector("#chats").innerHTML = "";
},
renderMessage: (message) => { //서버에 저장되어 있는 데이터들을 DOM을 이용하여 화면 상에 나타내준다
const chatsArea = document.querySelector("#chats");
const chat = document.createElement('div');
chat.classList.add('chat');
chat.innerHTML =
`<div class="username">${message.username}</div>
<div>${message.text}</div>
<div>${message.date}</div>`;
chatsArea.prepend(chat); //prepend를 사용하면 상단에서부터 추가된다
},
reset: () => { //서버로 메시지를 초기화 요청을 보낸다.
return window.fetch(`http://3.36.72.17:3000/${githubID}/clear`,{
method: 'POST'
})
.then(res => res.json())
.then(data => app.clearMessages()) //html 화면 상 채팅 목록들도 모두 삭제
}
};
app.init();
POST
버튼과 Clear
버튼에 이벤트 생성
const postbutton = document.querySelector('.postbtn')
//POST버튼
if(postbutton){
postbutton.addEventListener('click',function(event){
event.preventDefault();
let message = {};
let username = document.querySelector('.inputUser').value;
let text = document.querySelector('.inputChat').value;
message.username = username;
message.text = text;
message.roomname = 'main room'
message.date = new Date().toLocaleString();
app.send(message); //이름과 text내용을 받아와서 서버로 전송한다
app.renderMessage(message) //이후, 해당 데이터만 추가적으로 채팅목록에 추가해준다
document.querySelector('.inputUser').value = "";
document.querySelector('.inputChat').value = "";
})
}
const clearbutton = document.querySelector('.clearbtn')
//Clear버튼
if(clearbutton){
clearbutton.addEventListener('click',function(event){
event.preventDefault();
if(confirm('정말 삭제하시겠습니까?')===true){ //confirm메소드를 이용하여 삭제 시 알림창이 뜨도록 해준다.
app.reset();
}
else{
return;
}
})
}
fetchAPI
사용법은 어느 정도 익었으나, 확실하게 http 요청/응답 관련 공부를 좀 더 심도있게 해야겠다. 다음엔 서버 구현까지 해보면서 클라이언트-서버 간 통신을 확실하게 익혀야겠다.
Author And Source
이 문제에 관하여(Chatterbox Client 만들어보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@j_jhwww/TIL-Chatterbox-Client저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)