精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

構建一個即時消息應用(九):Conversation頁面

開發 后端
在這篇文章中,我們將對對話conversation頁面進行編碼。此頁面是兩個用戶之間的聊天室。在頂部我們將顯示其他參與者的信息,下面接著的是最新消息列表,以及底部的消息表單。

[[347198]]

本文是該系列的第八篇。

在這篇文章中,我們將對對話conversation頁面進行編碼。此頁面是兩個用戶之間的聊天室。在頂部我們將顯示其他參與者的信息,下面接著的是最新消息列表,以及底部的消息表單。

聊天標題

 

讓我們從創建 static/pages/conversation-page.js 文件開始,它包含以下內容:

  1. import http from '../http.js' 
  2. import { navigate } from '../router.js' 
  3. import { avatar, escapeHTML } from '../shared.js' 
  4.  
  5. export default async function conversationPage(conversationID) { 
  6.     let conversation 
  7.     try { 
  8.         conversation = await getConversation(conversationID) 
  9.     } catch (err) { 
  10.         alert(err.message) 
  11.         navigate('/'true
  12.         return 
  13.     } 
  14.  
  15.     const template = document.createElement('template'
  16.     template.innerHTML = ` 
  17.         <div> 
  18.             <a href="/">← Back</a> 
  19.             ${avatar(conversation.otherParticipant)} 
  20.             <span>${conversation.otherParticipant.username}</span> 
  21.         </div> 
  22.         <!-- message list here --> 
  23.         <!-- message form here --> 
  24.     ` 
  25.     const page = template.content 
  26.     return page 
  27.  
  28. function getConversation(id) { 
  29.     return http.get('/api/conversations/' + id) 

此頁面接收路由從 URL 中提取的會話 ID。

首先,它向 /api/ conversations/{conversationID} 發起一個 GET 請求,以獲取有關對話的信息。 如果出現錯誤,我們會將其顯示,并重定向回 /。然后我們呈現有關其他參與者的信息。

對話列表

 

我們也會獲取最新的消息并顯示它們。

  1. let conversation, messages 
  2. try { 
  3.     [conversation, messages] = await Promise.all([ 
  4.         getConversation(conversationID), 
  5.         getMessages(conversationID), 
  6.     ]) 

更新 conversationPage() 函數以獲取消息。我們使用 Promise.all() 同時執行這兩個請求。

  1. function getMessages(conversationID) { 
  2.     return http.get(`/api/conversations/${conversationID}/messages`) 

發起對 /api/conversations/{conversationID}/messages 的 GET 請求可以獲取對話中的最新消息。

  1. <ol id="messages"></ol> 

現在,將該列表添加到標記中。

  1. const messagesOList = page.getElementById('messages'
  2. for (const message of messages.reverse()) { 
  3.     messagesOList.appendChild(renderMessage(message)) 

這樣我們就可以將消息附加到列表中了。我們以時間倒序來顯示它們。

  1. function renderMessage(message) { 
  2.     const messageContent = escapeHTML(message.content) 
  3.     const messageDate = new Date(message.createdAt).toLocaleString() 
  4.  
  5.     const li = document.createElement('li'
  6.     if (message.mine) { 
  7.         li.classList.add('owned'
  8.     } 
  9.     li.innerHTML = ` 
  10.         <p>${messageContent}</p> 
  11.         <time>${messageDate}</time
  12.     ` 
  13.     return li 

每個消息條目顯示消息內容本身及其時間戳。使用 .mine,我們可以將不同的 css 類附加到條目,這樣您就可以將消息顯示在右側。

消息表單

 

 
  1. <form id="message-form"
  2.     <input type="text" placeholder="Type something" maxlength="480" required> 
  3.     <button>Send</button> 
  4. </form> 

將該表單添加到當前標記中。

  1. page.getElementById('message-form').onsubmit = messageSubmitter(conversationID) 

將事件監聽器附加到 “submit” 事件。

  1. function messageSubmitter(conversationID) { 
  2.     return async ev => { 
  3.         ev.preventDefault() 
  4.  
  5.         const form = ev.currentTarget 
  6.         const input = form.querySelector('input'
  7.         const submitButton = form.querySelector('button'
  8.  
  9.         input.disabled = true 
  10.         submitButton.disabled = true 
  11.  
  12.         try { 
  13.             const message = await createMessage(input.value, conversationID) 
  14.             input.value = '' 
  15.             const messagesOList = document.getElementById('messages'
  16.             if (messagesOList === null) { 
  17.                 return 
  18.             } 
  19.  
  20.             messagesOList.appendChild(renderMessage(message)) 
  21.         } catch (err) { 
  22.             if (err.statusCode === 422) { 
  23.                 input.setCustomValidity(err.body.errors.content) 
  24.             } else { 
  25.                 alert(err.message) 
  26.             } 
  27.         } finally { 
  28.             input.disabled = false 
  29.             submitButton.disabled = false 
  30.  
  31.             setTimeout(() => { 
  32.                 input.focus() 
  33.             }, 0) 
  34.         } 
  35.     } 
  36.  
  37. function createMessage(content, conversationID) { 
  38.     return http.post(`/api/conversations/${conversationID}/messages`, { content }) 

我們利用 partial application 在 “submit” 事件處理程序中獲取對話 ID。它 從輸入中獲取消息內容,并用它對 /api/conversations/{conversationID}/messages 發出 POST 請求。 然后將新創建的消息添加到列表中。

消息訂閱

為了實現實時,我們還將訂閱此頁面中的消息流。

  1. page.addEventListener('disconnect', subscribeToMessages(messageArriver(conversationID))) 

將該行添加到 conversationPage() 函數中。

  1. function subscribeToMessages(cb) { 
  2.     return http.subscribe('/api/messages', cb) 
  3.  
  4. function messageArriver(conversationID) { 
  5.     return message => { 
  6.         if (message.conversationID !== conversationID) { 
  7.             return 
  8.         } 
  9.  
  10.         const messagesOList = document.getElementById('messages'
  11.         if (messagesOList === null) { 
  12.             return 
  13.  
  14.         } 
  15.         messagesOList.appendChild(renderMessage(message)) 
  16.         readMessages(message.conversationID) 
  17.     } 
  18.  
  19. function readMessages(conversationID) { 
  20.     return http.post(`/api/conversations/${conversationID}/read_messages`) 

在這里我們仍然使用這個應用的部分來獲取會話 ID。 當新消息到達時,我們首先檢查它是否來自此對話。如果是,我們會將消息條目預先添加到列表中,并向 /api/conversations/{conversationID}/read_messages 發起 POST 一個請求,以更新參與者上次閱讀消息的時間。


本系列到此結束。 消息應用現在可以運行了。

 

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2020-10-16 14:40:20

即時消息Home頁面編程語言

2020-10-12 09:20:13

即時消息Access頁面編程語言

2020-10-09 12:45:19

創建消息即時消息編程語言

2019-09-29 15:25:13

CockroachDBGoJavaScript

2020-10-09 15:00:56

實時消息編程語言

2020-03-31 12:21:20

JSON即時消息編程語言

2019-10-28 20:12:40

OAuthGuard中間件編程語言

2020-10-10 20:51:10

即時消息編程語言

2021-03-25 08:29:33

SpringBootWebSocket即時消息

2023-08-14 08:01:12

websocket8g用戶

2025-06-30 01:45:00

Netty輪詢HTTP 協議

2015-03-18 15:37:19

社交APP場景

2014-10-15 11:01:02

Web應用測試應用

2018-08-22 17:32:45

2023-09-21 08:00:00

ChatGPT編程工具

2022-02-10 07:03:32

流量應用架構數據交換

2021-07-14 17:39:46

ReactRails API前端組件

2021-12-03 00:02:01

通訊工具即時

2023-09-15 10:10:05

R 語言

2010-05-24 09:51:37

System Cent
點贊
收藏

51CTO技術棧公眾號

亚洲人成亚洲精品| free性欧美| 国产精品18久久久久| 欧美巨大黑人极品精男| 国产精品探花一区二区在线观看| 美女福利一区二区| 国产精品毛片久久久久久| 91精品国产99久久久久久红楼 | 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | 777午夜精品福利在线观看| 51妺嘿嘿午夜福利| 97精品久久| 欧美视频在线播放| 成人免费性视频| 波多野结衣一区二区| 福利一区福利二区| 国产精品久久久久久久久| 九九热国产精品视频| 欧美日本成人| 精品剧情在线观看| 国产探花在线看| 中文字幕21页在线看| 亚洲欧美日韩系列| 亚洲五月六月| 免费a级毛片在线观看| 国产精品77777| 国产精品一区二区久久久| 国产又大又黑又粗免费视频| 99久久亚洲精品蜜臀| 亚洲毛片一区二区| 国产国语老龄妇女a片| 久久精品资源| 在线看日本不卡| 国产资源在线视频| 黄色在线观看视频网站| 中文字幕日本不卡| 日韩在线电影一区| 免费动漫网站在线观看| 91日韩在线专区| 国产美女精品久久久| 99草在线视频| 国内精品免费在线观看| 国产伦精品一区二区三区精品视频| 91精品国产综合久久久蜜臀九色| 狠狠色综合网| 欧美精品videos| 极品盗摄国产盗摄合集| 一本到12不卡视频在线dvd| 中文精品99久久国产香蕉| av女人的天堂| 亚洲欧洲色图| 国产亚洲福利一区| 亚洲天堂岛国片| 欧美第十八页| www日韩中文字幕在线看| 美女100%露胸无遮挡| 欧美一区电影| 在线视频免费一区二区| 国产视频不卡在线| 国产高清一区| 不卡毛片在线看| 久久久精品国产sm调教| 狠狠爱综合网| 欧洲精品久久久| 日日夜夜操视频| 蜜桃一区二区三区四区| 国产日产久久高清欧美一区| 国产剧情久久久| 国产成人av电影在线播放| 国产三区二区一区久久| 亚洲av成人无码久久精品老人| 91在线丨porny丨国产| 久久天堂国产精品| 成人av一区| 亚洲三级在线观看| 欧美无砖专区免费| 中文字幕 在线观看| 欧美天堂一区二区三区| 国产黑丝在线视频| 久久97精品| 国产亚洲欧洲高清| 日韩精品一区二区亚洲av性色| 午夜激情一区| 琪琪亚洲精品午夜在线| 一级黄色片在线播放| 国产成人福利片| 久久亚洲高清| 精品国产丝袜高跟鞋| 亚洲一二三区在线观看| 青青在线视频观看| 999色成人| 日韩av一区在线| av资源在线免费观看| 国产精品mm| 国产精品91视频| 精品人妻少妇嫩草av无码专区| 97精品久久久午夜一区二区三区| 视频在线一区二区三区| 欧美另类tv| 欧美色图在线观看| 国产污在线观看| 久久人人88| 91国产高清在线| 91九色蝌蚪91por成人| 成人a区在线观看| 亚洲国产精品一区在线观看不卡 | 人妻妺妺窝人体色www聚色窝| 久久精品在这里| 成人短视频在线观看免费| 成人直播视频| 精品美女一区二区| 色婷婷粉嫩av| 久久精品伊人| 国产伦精品一区二区| 麻豆tv在线| 91成人网在线| 大乳护士喂奶hd| 91精品成人| 国产精品视频最多的网站| 色视频在线观看免费| 一区二区三区中文在线观看| 中文字幕永久视频| 亚洲警察之高压线| 久久久久久久久久久人体| 国产又色又爽又黄又免费| 久久综合久久鬼色| 欧美一级欧美一级| 欧美不卡在线观看| 久久精品国产91精品亚洲| 色老头一区二区| wwwwww.欧美系列| 日韩av中文字幕第一页| 91精品久久久久久综合五月天| 中文字幕亚洲字幕| 亚洲 国产 日韩 欧美| 91片黄在线观看| 成人中文字幕在线播放| 国产乱人伦精品一区| 欧美精品中文字幕一区| 国产熟女精品视频| 亚洲欧美一区二区三区国产精品| 在线播放av中文字幕| 区一区二视频| 国产精品美女午夜av| 国产一级片在线| 91成人免费在线| 日本一卡二卡在线播放| 热久久久久久久| 亚洲丰满在线| 四虎国产精品免费久久| 日韩在线观看网址| 91亚洲视频在线观看| 中文字幕一区二区不卡| 久国产精品视频| 中文不卡在线| 俄罗斯精品一区二区| 日韩精品分区| 亚洲国产一区自拍| 成人毛片18女人毛片| 91女厕偷拍女厕偷拍高清| 免费无码av片在线观看| 国产麻豆精品久久| 国产精品久久久久久久久久免费 | 欧美一区二区三区免费观看视频| 高清欧美精品xxxxx| 亚洲91网站| 午夜精品一区二区三区在线 | 日韩三级在线观看| 国产在线一二区| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 国产探花一区在线观看| 国产精品欧美一区二区| 免费在线观看av片| 日韩精品一区二区三区在线 | 久久久久久自在自线| 日韩av高清| 欧美久久一区二区三区| 97视频在线观看播放| 黄色av网址在线免费观看| 欧美日韩一二区| 免费在线观看亚洲| 久久久久国色av免费看影院| 中文字幕国内自拍| 欧美日一区二区在线观看| 精品一区二区视频| 国产91欧美| 欧美激情一区二区三区在线视频观看| 五月婷中文字幕| 欧美日韩国产综合久久| 黄色一级视频在线观看| 久久青草国产手机看片福利盒子| 中文av一区二区三区| 极品少妇一区二区三区| 日韩一本精品| 激情av综合| 国产精品日韩在线一区| av中文在线资源库| 精品国产一区二区三区在线观看 | 99久久夜色精品国产亚洲| 亚欧色一区w666天堂| 91社区视频在线观看| 成人国产精品视频| 性生活免费在线观看| 日韩视频在线一区二区三区| 亚洲一区美女| 神马午夜久久| eeuss一区二区三区| 国产黄色一区| 人人澡人人澡人人看欧美| 自拍亚洲图区| 尤物tv国产一区| 熟妇人妻中文av无码| 91精选在线观看| 成人免费一区二区三区| 红桃av永久久久| 特级片在线观看| 中文字幕亚洲区| 波多野结衣片子| 成人av资源在线| 国产探花在线观看视频| 日本va欧美va瓶| 日本在线视频www| 亚洲高清激情| 51xx午夜影福利| 99久久综合狠狠综合久久aⅴ| 欧美一区二区高清在线观看| 久久porn| 国产在线一区二区三区四区| 久久亚洲精精品中文字幕| 国产精品一区二区电影| 97人人做人人爽香蕉精品| 国产999视频| 欧美成人免费电影| 日本在线观看天堂男亚洲| 日韩理论视频| 欧美中文字幕在线视频| 国产免费拔擦拔擦8x在线播放| 欧美激情一级欧美精品| 男插女视频久久久| 欧美精品在线免费观看| 午夜在线激情影院| 久久亚洲电影天堂| 久草资源在线| 不卡中文字幕av| 中文字幕在线播放网址| 欧美成人激情视频| 成人日批视频| 久久69精品久久久久久久电影好 | 亚洲综合在线五月| 亚洲国产成人精品综合99| 亚洲精品国产a| 18精品爽视频在线观看| 亚洲一区成人在线| 日韩精品一区二区av| 婷婷成人激情在线网| 日韩精品视频免费看| 欧美性xxxx极品hd满灌| 无码人妻丰满熟妇区五十路| 在线观看av一区| 中文字幕网址在线| 91精品在线观看入口| 亚洲第一大网站| 亚洲国产欧美一区二区三区同亚洲| 日韩一级片免费看| 日韩精品黄色网| а√天堂中文在线资源bt在线| 色一情一乱一区二区| 在线午夜影院| 97在线视频免费看| 天然素人一区二区视频| 国产在线高清精品| 136福利精品导航| 欧美一区1区三区3区公司| 久久裸体网站| 久草视频这里只有精品| 亚洲免费综合| 成人不卡免费视频| 成人国产亚洲欧美成人综合网| 老牛影视av老牛影视av| 日本一区二区三区在线不卡| 免费国产羞羞网站美图| 午夜精品久久久久久| 色婷婷久久综合中文久久蜜桃av| 91精品国产综合久久精品性色| 天天综合网天天综合| 在线播放国产一区中文字幕剧情欧美 | 久久亚洲综合av| 国产wwwwxxxx| 午夜精品aaa| 亚洲一级特黄毛片| 亚洲国产日韩欧美在线99| 在线观看麻豆| 性欧美亚洲xxxx乳在线观看| 久久免费资源| 久久青青草原| 午夜精品国产| 男人的天堂最新网址| 99久久久免费精品国产一区二区| 99在线视频免费| 污片在线观看一区二区| 国产精品九九九九| 亚洲美女www午夜| 欧美人动性xxxxz0oz| 国产日本欧美在线观看| 日韩美女国产精品| 欧洲精品视频在线| 日本成人在线不卡视频| 疯狂揉花蒂控制高潮h| 亚洲日本在线a| 欧美日韩 一区二区三区| 亚洲国产精品视频在线观看| 精品美女在线观看视频在线观看| 日韩免费在线视频| 国产精品美女在线观看直播| 天天成人综合网| 日韩高清在线观看| 鲁大师私人影院在线观看| 一区二区三区在线影院| 岳乳丰满一区二区三区| 亚洲欧美日韩天堂| 鲁鲁在线中文| 国产伦精品一区二区三区| 中文字幕人成人乱码| 色播五月激情五月| 中文字幕av一区二区三区高 | 久久高清国产| 青青草视频网站| 亚洲午夜免费福利视频| 国产激情无套内精对白视频| zzijzzij亚洲日本成熟少妇| 黄色日韩网站| 色播亚洲婷婷| 秋霞av亚洲一区二区三| 欧美激情亚洲色图| 色狠狠av一区二区三区| 日本国产在线| 日韩av不卡在线| 美女精品一区最新中文字幕一区二区三区 | 自拍视频在线免费观看| 国产精品美女久久| jlzzjlzz亚洲女人| 最近中文字幕一区二区| 国产日产亚洲精品系列| 国产精品xxxxxx| 曰本色欧美视频在线| 欧美另类激情| aaa免费在线观看| 韩国成人福利片在线播放| 国产麻豆视频在线观看| 制服丝袜av成人在线看| aaa大片在线观看| 成人性色av| 中文亚洲免费| 天天躁夜夜躁狠狠是什么心态| 色美美综合视频| 最新真实国产在线视频| 成人xxxx视频| 欧美日韩天堂| 午夜视频在线观看国产| 色欧美乱欧美15图片| 国产福利电影在线| 成人免费看吃奶视频网站| 欧美成人高清| 丰满少妇一区二区三区| 欧美亚洲精品一区| 看黄网站在线观看| 国产精品久久国产精品| 国产日韩欧美一区在线 | 精品国精品国产自在久国产应用 | 无码人妻精品一区二区| 在线电影中文日韩| 久久wwww| 国产l精品国产亚洲区久久| 亚洲国产成人私人影院tom| 国产精品一区二区免费视频| 国外成人在线视频| 国产中文字幕一区二区三区| 红桃视频 国产| 亚洲电影一区二区三区| 国产天堂在线| 97se亚洲综合| 久久婷婷影院| 欧美久久久久久久久久久久| 亚洲国产私拍精品国模在线观看| 欧美精品资源| 欧美图片激情小说| 国产视频一区二区在线| 国产美女免费看| 欧美在线视频观看| 中文字幕日韩一区二区不卡 | 久久久久久综合网| 天天色综合天天| 久操视频在线观看| 久久久国产精品一区二区三区| 免费观看成人av| 久久久国产精品成人免费| 久久精品精品电影网| 久久99国产精品视频| 久久久久国产免费| 欧美日韩国产一区二区三区地区|