你在 HTTPS 页面 里加载 HTTP 资源 → ,不支持 HTTPS → 握手失败。浏览器自动升级为 HTTPS。你的 8080 端口只支持 HTTP

从你的截图能看到两个核心问题:

  1. 好友数据已经拿到了,但页面显示「暂无好友」

    • 控制台里 friendList 数组里明明有 {id:1, nickname:"小王"}
    • 页面却渲染了空状态,说明 v-for 循环没生效数组判断逻辑有问题
  2. WebSocket 安全报错

    plaintext

    复制代码
    SecurityError: An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.
    • 你现在用的是 https://longwen.natapp1.cc,但 WebSocket 连的是 ws://192.168.0.103:8080
    • 浏览器禁止在 HTTPS 页面发起 非加密 ws 连接 ,必须改成 wss:// 或用同域名代理

✅ 第一步:修复好友列表显示问题

问题出在空状态判断和数组渲染逻辑,我帮你改成最稳妥的版本:

vue

复制代码
<!-- 把原来的空状态代码替换成这个 -->
<div v-if="friendList.length === 0" style="padding:16px; color:#999; text-align:center;">
  暂无好友(当前数组长度:{{ friendList.length }})
</div>
<div 
  class="item-list" 
  v-for="friend in friendList" 
  :key="friend.id" 
  @click="openPrivateChat(friend)"
  style="cursor:pointer;"
>
  <img class="avatar" :src="IMG_BASE + friend.avatar" />
  <div class="name">{{ friend.nickname }} (ID:{{ friend.id }})</div>
</div>

同时在 getFriendList 里强制打印数组长度,方便你调试:

js

复制代码
const getFriendList = async () => {
  try {
    const res = await service.get('/friends')
    const data = res.data?.data || res.data || []
    friendList.value = Array.isArray(data) ? data : []
    console.log('✅ 好友列表最终长度:', friendList.value.length)
    console.log('✅ 好友列表内容:', friendList.value)
  } catch (e) {
    console.error('❌ 获取好友失败', e)
    friendList.value = []
  }
}

✅ 第二步:修复 WebSocket 安全问题

ws:// 改成 wss://(如果你的后端支持 wss),或者用 Natapp 域名代理:

js

复制代码
// 原来的代码:
// socket = new WebSocket(`ws://192.168.0.103:8080/ws?user_id=${myId.value}`)

// 改成下面任意一种:

// 方案1:如果你的后端支持 wss(推荐)
socket = new WebSocket(`wss://192.168.0.103:8080/ws?user_id=${myId.value}`)

// 方案2:用 Natapp 域名(和页面同域名,避免跨域)
socket = new WebSocket(`wss://longwen.natapp1.cc/ws?user_id=${myId.value}`)

🎯 最终效果

  1. 页面会显示「小王」的好友条目,不再显示「暂无好友」
  2. WebSocket 连接不再报安全错误,能正常实时聊天

💡 额外检查

如果改完还是不显示,打开控制台输入:

js

复制代码
friendList.value

看返回是不是 [{id:1, nickname:"小王", ...}],如果是数组但页面不渲染,就是 Vue 响应式问题,加一句强制更新:

js

复制代码
import { nextTick } from 'vue'
// 在 getFriendList 最后加
nextTick(() => console.log('✅ 页面已更新'))

要不要我把完整修复后的代码直接给你,你复制覆盖就能用?

相关推荐
CHANG_THE_WORLD13 小时前
TCP 三次握手彻底解析:SYN、ACK、SEQ、确认号与状态迁移
网络·网络协议·tcp/ip
2501_9151063213 小时前
TraceEagle 代理抓包教程 本机和手机的 HTTPS 抓包方法
网络协议·计算机网络·网络安全·ios·adb·https·udp
小心我捶你啊14 小时前
数据采集和Web解锁不是一回事,从用途到规则区分
前端·爬虫·网络协议
DLYSB_14 小时前
基于 HTTP API 与 Modbus 协议的多源监控声光语音联动告警系统设计与实现
网络·网络协议·http·报警灯
小邓的技术笔记20 小时前
解析 gin 接收到 http 请求是怎么处理的
网络协议·http·gin
TlSfoward21 小时前
TLSFOWARD抓包工具 TLS指纹
网络协议·http·百度·https
利来利往1 天前
如果你的电脑可以ping ip无法ping域名
网络·网络协议·tcp/ip
lupai1 天前
赛符 SSL 证书全场景部署与信任价值构建指南
网络·网络协议·ssl
CHANG_THE_WORLD1 天前
TCP 四次挥手彻底解析:FIN、ACK、SEQ、半关闭与 TIME-WAIT
网络·网络协议·tcp/ip
测试员周周1 天前
【skills5】一份 spec 生成 k6/JMeter/Locust:性能压测 + 全站截图,上线前的双保险
功能测试·网络协议·测试工具·jmeter·http·自动化·集成测试