uniapp聊天记录本地存储(详细易懂)

      

目录

目录

1、通过websocket拿取数据

2、获取聊天数据

3、聊天信息存储 、更新

4、读取聊天记录

5、发送信息,信息获取

6、最终效果

1.聊天信息的存储格式

 2、样式效果


         写聊天项目,使用到了本地存储。需要把聊天信息保存在本地,实时获取。

        这个项目中,使用了websocket进行数据的交互,websocket部分就不写了,如果有需要可以看我关于websocket的博客

1、通过websocket拿取数据

        下面我有用到websocket的一些方向,但是没有写方法内容,这用了方法名。宝子们,可以看我直接写的文章,结合理解。

在vue项目中webSocket封装(传token)_vue3 websocketbean 设置header token-CSDN博客

        不需要传token的可以不传token,自己稍作更改,即可 。

2、获取聊天数据

	import {sendWebsocket,websocketSend,initWebSocket} from "../../utils/apis/ws.js";onMounted(async () => {//进入页面建立链接initWebSocket()const val = ref({id: userstore.userData.id,username: userstore.userData.username})//通过websocket发送信息sendWebsocket(wsMessage, wsError);websocketSend(val.value)//命名文件,进行读取聊天信息(在聊天信息中找到,自己和对应id朋友的聊天记录)filename.value = `chat_${sendData.value.to}_${sendData.value.from}`;//接口数据,读取本地存储的数据chatLog.value = readChatRecords(sendData.value.from, sendData.value.to)[filename.value];})// 监听服务器传来的变化const wsMessage = (data) => {console.log(data, "监听服务器传来的变化");//得到websockt返回的数据wsstore.WsChat = data;if (data.from && data.to) {//如果发送人的id和接收人的id都存在,那么进入聊天记录存储方法,进行聊天存储和更新saveChatRecord(data.from, data.to, data)}//读取聊天信息,//const res = readChatRecords(data.from, userstore.userData.id)};

3、聊天信息存储 、更新

        对于一个名为A的用户和一个名为B的用户的聊天记录,可以将它们存储在一个名为chat_A_B.json的文件中。

    // 存储聊天记录function saveChatRecord(userId, toUserId, message) {// 找到本地存储最外面的对象 , userstore.userData.id 登录人的 id.const fileName = `chat_${userstore.userData.id}.json`;//创建里面的对象,自身id和接收信息的人id.用于区别和不同朋友的聊天记录const chat = `chat_${userId}_${toUserId}`;try {//获取本地的聊天信息,如果没有生成{"chatHistory": {}}const chatContent = uni.getStorageSync(fileName) || '{"chatHistory": {}}';//将获取的数据const chatRecords = JSON.parse(chatContent);//在获取数据中查找是否有自己和好友的聊天信息存储if (!chatRecords.chatHistory.hasOwnProperty(chat)) {//如果没有创建一个新的空数组chatRecords.chatHistory[chat] = [];}// 将新消息追加到聊天记录数组中chatRecords.chatHistory[chat].push(message);//本地存储uni.setStorageSync(fileName, JSON.stringify(chatRecords));} catch (e) {console.error(e);}}}

4、读取聊天记录

        在用户打开聊天窗口时,我们应获取相应的聊天记录

	// 读取聊天记录function readChatRecords(userId, toUserId) {//找到登录人的存储文件const fileName = `chat_${userId}.json`;try {//获取信息,如果不存在,返回{"chatHistory": {}}const chatContent = uni.getStorageSync(fileName) || '{"chatHistory": {}}';return JSON.parse(chatContent).chatHistory;} catch (e) {console.error(e);return [];}}

5、发送信息,信息获取

//登录人发送信息,更新本地存储
const Send = async () => {//获取信息发送时间sendData.value.time = getNowTime()//想接口发送数据websocketSend(sendData.value)//将发送的聊天信息保存在本地saveChatRecord(sendData.value.to, sendData.value.from, sendData.value);//获取本地存储的数据进行页面更新chatLog.value = readChatRecords(sendData.value.from, sendData.value.to)[filename.value];console.log(chatLog.value, "发送完信息,获取数据");// 将输入框清空sendData.value.content = ""}//在登录人发送信息后本地存储数据更新,监测到更新后,读取存储数据,进行页面更新
watch(() => ws.WsChat, (newValue, oldValue) => {console.log(`count发生了变化,老值为${oldValue},新值为${newValue}`);//监测本地存储中是否有数据更新,即是否收到新的消息chatLog.value = readChatRecords(sendData.value.from, sendData.value.to)[filename.value];}, {immediate: true})

6、最终效果

1.聊天信息的存储格式

        id为9的账号都存储在chat_9.json文件中,chat_7_9是id为9的账号和朋友id为7的账号的聊天记录。chat_8_9是id为9的账号和朋友id为8的账号的聊天记录。

 2、样式效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/268488.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第105讲:Mycat垂直分表实战:从规划到解决问题的完整指南

文章目录 1.垂直分表的背景2.垂直分表案例实战2.1.垂直分表规划2.2.配置Mycat实现垂直分表2.3.重启Mycat2.4.在Mycat命令行中导入数据结构2.5.查看由Mycat分表后每个分片上存储的表2.6.Mycat垂直分表后可能遇到的问题2.7.垂直分表完成 1.垂直分表的背景 我们的商城系统数据库&…

软件测试项目实战,某购物车/测试点分析实战(详细步骤)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 第一步&#xff1…

winform 输出运行设备的mac地址

winform定制一个代码段 输出运行设备的mac码此方法获取的是运行设备上的物理网卡的MAC地址,并不包括虚拟网卡或无线网卡的MAC地址。当设备具有多个网卡时,它只返回第一个正常运行的网卡的MAC地址。如果未找到任何网卡,则返回"未找到MAC地…

贪心(基础算法)--- 区间选点

905. 区间选点 思路 (贪心)O(nlogn) 根据右端点排序 将区间按右端点排序 遍历区间,如果当前区间左端点不包含在前一个区间中,则选取新区间,所选点个数加1,更新当前区间右端点。如果包含,则跳…

雅特力AT32L021首款低功耗MCU震撼登场

雅特力于2月28日正式发布AT32L021首款入门级低功耗MCU,搭配不同容量Flash、SRAM,提供7种封装类型共21个型号选择,最小封装面积仅3x3mm。为降低能耗,延长设备运作时间,AT32L021系列支持多种能耗模式和休眠模式&#xff…

韦东山嵌入式Liunx入门驱动开发五

文章目录 一、驱动程序基石1-1 休眠与唤醒1-2 POLL机制1-3 异步通知(1) 异步通知程序解析(2) 异步通知机制内核代码详解 1-4 阻塞与非阻塞1-5 定时器(1) 内核函数(2) 定时器时间单位 1-6 中断下半部 tasklet 本人学习完韦老师的视频,因此来复习巩固,写以…

【活动】前端世界的“祖传代码”探秘:从古老魔法到现代重构

作为一名前端工程师,我时常在项目中邂逅那些被岁月打磨过的“祖传代码”。它们就像古老的魔法书页,用HTML标签堆砌起的城堡、CSS样式表中的炼金术,以及JavaScript早期版本中舞动的符咒。这些代码承载着先驱们的探索精神和独特智慧&#xff0c…

#FPGA(基础知识)

1.IDE:Quartus II 2.设备:Cyclone II EP2C8Q208C8N 3.实验:正点原子-verilog基础知识 4.时序图: 5.步骤 6.代码:

专业145+总分410+西工大西北工业大学827信号与系统考研经验电子信息与通信工程,海航,真题,大纲,参考书。

经过一年的努力,分数终于出来。今年专业课827信号与系统145(很遗憾差了一点点满分,没有达到Jenny老师的最高要求),数一130,英语和政治也都比较平衡,总分410分,当然和信息通信考研Jen…

【Git】深入理解 Git 分支合并操作:git merge dev 命令详解

深入理解 Git 合并操作:git merge dev 命令详解 摘要:本文将深入探讨 Git 中的合并操作,以及如何使用 git merge dev 命令将dev 分支的修改合并到当前分支(假设当前分支为main 分支)中。通过详细的解释和示意图&#x…

linux安全--DNS欺骗,钓鱼网站搭建

目录 一,实验准备 首先让client能上网 1)实现全网互通,实现全网互通过程请看 2)SNAT源地址转换 3)部署DHCP服务 4)配置DHCP服务 5)启动服务 6)安装DNS服务 7)DNS配置 8)启动DNS…

HOOPS Communicator对3D大模型轻量化加载与渲染的4种解决方案

今天给大家介绍一些关于3D Web轻量化引擎HOOPS Commuicator的关键概念,这些概念可以帮您在HOOPS Communicator流缓存服务器之上更好地构建您自己的模型流服务器。如果您是有大型数据集,那么,使用流缓存服务器可以极大地帮助您最大限度地减少内…

Unity 预制体与变体

预制体作用: 更改预制体,则更改全部的以预制体复制出的模型。 生成预制体: 当你建立好了一个模型,从层级拖动到项目中即可生成预制体。 预制体复制模型: 将项目中的预制体拖动到层级中即可复制。或者选择物体复制粘贴。…

Java基础 - 6 - 面向对象(二)

Java基础 - 6 - 面向对象(一)-CSDN博客 二. 面向对象高级 2.1 static static叫做静态,可以修饰成员变量、成员方法 2.1.1 static修饰成员变量 成员变量按照有无static修饰,分为两种:类变量、实例变量(对象…

VL53L8CX驱动开发(1)----驱动TOF进行区域检测

VL53L8CX驱动开发----1.驱动TOF进行区域检测 概述视频教学样品申请源码下载主要特点硬件准备技术规格系统框图应用示意图区域映射生成STM32CUBEMX选择MCU 串口配置IIC配置LPn 设置X-CUBE-TOF1串口重定向代码配置Tera Term配置演示结果 概述 VL53L8CX是一款8x8多区域ToF测距传感…

[晓理紫]每日论文分享(有中文摘要,源码或项目地址)--强化学习

专属领域论文订阅 关注{晓理紫|小李子},每日更新论文,如感兴趣,请转发给有需要的同学,谢谢支持 如果你感觉对你有所帮助,请关注我,每日准时为你推送最新论文。 分类: 大语言模型LLM视觉模型VLM扩散模型视觉…

Git分布式版本控制系统——git学习准备工作

一、Git仓库介绍 开发者可以通过Git仓库来存储和管理文件代码,Git仓库分为两种: 本地仓库:开发人员自己电脑上的Git仓库 远程仓库:远程服务器上的Git仓库 仓库之间的运转如下图: commit:提交&#xff…

linux 搭建web网站

综合练习:请给openlab搭建web网站 网站需求: 1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于[www.openlab.…

从零开始,使用C语言实现扫雷小游戏

扫雷 1. 前言2. 准备工作3. 设计思路4. 定义数组5. 初始化6. 打印7. 布置雷8. 排查雷9. 完整代码 1. 前言 大家好,我是努力学习游泳的鱼。今天我们会用C语言实现一个经典的windows小游戏:扫雷。扫雷是一款单机小游戏,我上中学时特喜欢在电脑…

PHP【swoole】

前言 Swoole官方文档:Swoole 文档 Swoole 使 PHP 开发人员可以编写高性能高并发的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服务,让 PHP 不再局限于 Web 领域。Swoole4 协程的成熟将 PHP 带入了前所未有的时期, 为性能的提升提供了独一无…