[Chatterbox - Client]

G·2021년 5월 8일
0
post-thumbnail

스프린트로 진행한 chatterbox-client
서버는 AWS에 미리 구축되어 있는걸 사용했다.

fetch API를 사용해서 서버에 메세지를 요청(GET)하고, 메세지를 보내게(POST)하는 스프린트였다...

const app = {
  server: `http://3.36.72.17:3000/${githubID}/messages`,
  init: () => {
    app.handleSubmit()
  },
  fetch: (callback) => {
    console.log('fetch합니다.')
    window
    .fetch(app.server)
    .then(data => data.json())
    .then(callback)
  },
  clearMessages: () => {
    console.log('브라우저상의 메세지 모두삭제')
    document.querySelector('#chats').innerHTML = ''
  },
  clearForms: () => { //새 메시지를 작성 후 send로 post요청을 위해 post버튼을 누르면 사라지게 만든다.
    console.log('내가 새로 만든 메세지 value값 삭제')
    document.querySelector('.inputUser').value = ''
    document.querySelector('.inputChat').value = ''
  },
  send: (message, callback) => {
    console.log('post요청')
    window.
    fetch(app.server, {
      method: 'POST',
      body: JSON.stringify(message),
      headers:{'Content-Type': 'application/json'}
    })
    .then(response => response.json())
    .then(callback)
  },
  renderMessage: ({username, text, date, roomname}) => { 
    // 브라우저상에 흩뿌려주는 기능 한 덩어리씩 흩뿌려야하니까
    // 큰 틀 <div>하나로 다 감싼다.
    console.log('흩뿌리기')
    const temp = `<div class='chat'>
    <div>${username}</div>
    <div>${text}</div>
    <div>${date}</div>
    <div>${roomname}</div>
    </div>`
    document.querySelector('#chats').innerHTML = 
    temp + document.querySelector('#chats').innerHTML 
    // 기존 데이터값에 새로 추가하는 데이터(메세지)를 붙여서 렌더링
  },
  handleSubmit: () => {
    // submit 이벤트처리
    console.log('submit 이벤트가 처리됩니다.')
    let button = document.querySelector('.submit')
    button.addEventListener("submit", app.handleChange)
  },
  handleChange: (e) => {
    console.log('새 메세지 post요청')
    e.preventDefault() // 기본동작을 제어하는것 페이지 깜빡임 방지
    app.clearMessages() // 기존 브라우저에 보이는 메시지들 삭제
    app.send({ // 내가 새로 쓴 메시지들 post요청
      username: document.querySelector('.inputUser').value,
      text: document.querySelector('.inputChat').value,
      date: new Date(),
      roomname: 'secrets room'
    },() => {
      app.fetch(data => // fetch메소드 사용해서 데이터값들 가져옴
        data.forEach(app.renderMessage)) // 가져온 값들을 브라우저상에 흩뿌려줌
        app.clearForms() // text창 클리어~
    }
    )
  }
};
app.init();

각각의 메소드마다 콘솔로그를 찍어주어서 어떻게 진행이되는지 더 확실히 알 수 있었다.

fetch api를 사용하게되면 기본적으로 get요청을 하고, 추가적으로 post로 사용하고싶으면 메소드를 변경하면 되는게 편했당.
send메소드에서 안쪽에 body나 headers를 서버측에서 읽을수 있게 만들어주는 법도 신기했다. 앞서 작성한 client-server-api에서의 프로토콜이지 않나싶다. 서버가 읽을수있게 변경해서 보내주고 또 서버는 클라이언트가 읽을수 있게 !

profile
Drarreg

0개의 댓글