Newer
Older
2022-autumn-study / public_html / new-socket.ejs
@ItoRino ItoRino on 25 Oct 2022 4 KB add:チャット終わり
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css" rel="stylesheet">
    <link href="https://unpkg.com/nes.css@latest/css/nes.min.css" rel="stylesheet" />
    <title>データベース掲示板</title>

</head>
<body class="bg-pink-50">
    <main class="mt-20">
        <div class="nes-container is-dark with-title">
            <p class="title">Tubuyakisakata</p>
            <div>
                <span class="text-sm font-bold text-center">つぶやきばしょ!</span>
                <div class="p-2 mb-2">
                    <span class="websocket-status nes-text is-primary">null</span>
                  </div>
            </div>
            <section class="my-4">
                <div class="p-2 rounded shadow">
                    <form method="post">
                        <!--ここのname="name"のnameというのがデータベースに入る-->
                        <label">名前:<input type="text" name="name"  style="color: #000;"></label><br>
                        <label>コメント:<br>
                        <!--ここのname="content"のcontentというのがデータベースに入る-->
                        <textarea name="comment" rows="6" cols="60"  style="color: #000;" id="send-message"></textarea></label><br>
                        <input type="submit" value="送信" id="send-botton"  style="color: #000;">
                    </form>
                </div>
                <section class="my-4">
                    <div class="text-sm font-bold text-center">メッセージ一覧</div>
                    <p><!--postsに入っているデータを連続で表示させる-->
                        <% for (let data of posts) { %>
                            <!--dataに入っているid.name.date(日付)を表示させる-->
                            <%= data.id %>. <%= data.name %> - <%= data.date %><br>
                            <pre class="bbs">
                                <!--内容を表示させる-->
                                <%= data.comment %>
                            </pre>
                            <hr>
                        <% } %>
                        <!--ここで連続終了-->
                        <!--中身がからの時のメッセージ表示-->
                        <% if (msg) { %>
                        <p><b><%= msg %></b></p>
                        <% } %>
                      </p>
                </section>
              </section>
        </div>
    </main>
<script>
const URL = 'ws://localhost:3000/'
const PROTOCOL = 'ws-sample'

const socket = new WebSocket(URL, PROTOCOL)
// ------------------------------
// WebSocket イベント
// ------------------------------

// WebSocket が開通したら発火する
// socket.onopen = () => {} でも可
socket.addEventListener('open', (event) => {
  setWsStatus('つぶやいてくれたまえ')
})

// WebSocketサーバ からメッセージを受け取ったら発火する
// socket.onmessage = () => {} でも可
socket.addEventListener('message', ({ data }) => {
  setWsStatus('message: ' + data)
  appendMessage(data)
})

// WebSocketサーバ からエラーメッセージを受け取ったら発火する
// socket.onerror = () => {} でも可
socket.addEventListener('error', (event) => {
  setWsStatus('エラー発生だよ')
  console.log('error')
})

// WebSocket がクローズしたら発火する
// socket.onclose = () => {} でも可
socket.addEventListener('close', (event) => {
  setWsStatus('つぶやき終わり!')
  console.log('close')
})

// ------------------------------
// WebSocket メソッド
// ------------------------------
const sendMessage = (message) => {
  socket.send(message)
}

const sendMessageEl = document.querySelector('#send-message')
const sendButtonEl = document.querySelector('#send-button')
sendButtonEl.addEventListener('click', () => {
  const message = sendMessageEl.value
  sendMessage(message)
  sendMessageEl.value = ''
})
</script>
</body>
</html>