在vue项目中webSocket封装(传token)

这篇具有很好参考价值的文章主要介绍了在vue项目中webSocket封装(传token)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

传递token

        在websocket中,目前未提供修改请求头字段的方法,参考其他的一些文章,依照他们的写法依然未能实现传递token,所有我和后端另辟蹊径,把token传在路径里面。

    let wsUrl = "ws://39.101.77.206:8181/march/admin/interviewRecord/InterviewRecord";

 //从pinia获取token数据
     const user = userLogin()
 //按照后端的要求拼接token数据
     const token = `Bearer ${user.userInfo.token}`
     console.log(token);
 // ws请求完整地址
    const requstWsUrl = `${wsUrl}?token=${encodeURIComponent(token)}`
 //建立链接
    websock = new WebSocket(requstWsUrl)

 websocket封装

        1、封装

//websocket.js

import { ElMessage } from "element-plus";
import { userLogin } from '@/stores/user.js';

let websock = null
let messageCallback = null
let errorCallback = null
let wsUrl = "ws://39.101.77.206:8181/march/admin/interviewRecord/InterviewRecord";

// 接收ws后端返回的数据
function websocketonmessage(e) {
    console.log(e, "接收后端返回的数据");
    messageCallback(JSON.parse(e.data))
}

/**
 * 发起websocket连接
 * @param {Object} agentData 需要向后台传递的参数数据
 */
export function websocketSend(agentData) {
    // 加延迟是为了尽量让ws连接状态变为OPEN   
    setTimeout(() => {
        // 添加状态判断,当为OPEN时,发送消息
        if (websock.readyState === websock.OPEN) { // websock.OPEN = 1 
            // 发给后端的数据需要字符串化
            websock.send(JSON.stringify(agentData))
        }
        if (websock.readyState === websock.CLOSED) { // websock.CLOSED = 3 
            console.log('websock.readyState=3')
            ElMessage.error('ws连接异常,请稍候重试')
            errorCallback()
        }
    }, 500)
}

// 关闭ws连接
function websocketclose(e) {
    // e.code === 1000  表示正常关闭。 无论为何目的而创建, 该链接都已成功完成任务。
    // e.code !== 1000  表示非正常关闭。
    if (e && e.code !== 1000) {
        ElMessage.error('ws连接关闭')
    }
}
// 建立ws连接
function websocketOpen(e) {
    console.log('ws连接成功', e)
}

// 初始化weosocket
export function initWebSocket() {
    if (typeof (WebSocket) === 'undefined') {
        ElMessage.error('您的浏览器不支持WebSocket,无法获取数据')
        return false
    }
    //从pinia获取token数据
    const user = userLogin()
    //按照后端的要求拼接token数据
    const token = `Bearer ${user.userInfo.token}`
    // ws请求完整地址
    const requstWsUrl = `${wsUrl}?token=${encodeURIComponent(token)}`
    //建立链接
    websock = new WebSocket(requstWsUrl)

    websock.onmessage = function (e) {
        websocketonmessage(e)
    }
    websock.onopen = function () {
        websocketOpen()
    }
    websock.onerror = function () {
        ElMessage.error('ws连接异常,请稍候重试')
        errorCallback()
    }
    websock.onclose = function (e) {
        websocketclose(e)
    }
}

/**
 * 发起websocket请求函数
 * @param {function} successCallback 接收到ws数据,对数据进行处理的回调函数
 * @param {function} errCallback ws连接错误的回调函数
 */
export function sendWebsocket(successCallback, errCallback) {
    initWebSocket()
    messageCallback = successCallback
    errorCallback = errCallback
}

/**
 * 关闭websocket函数
 */
export function closeWebsocket() {
    console.log("关闭链接")
    if (websock) {
        console.log("关闭连");
        websock.close() // 关闭websocket
        websock.onclose() // 关闭websocket
    }
}

        2、在vue文件中使用

        这样写就可以长久的建立链接。文章来源地址https://www.toymoban.com/news/detail-861761.html

// .vue

<template>
     <Editor
         v-model="content"
         mode="default"
         @onBlur="handleBlur(scoped.row.Record[index])"
      />
</template>

<script setup>

import { ref, onMounted, onBeforeUnmount } from "vue";

import {
  sendWebsocket,
  closeWebsocket,
  websocketSend,
} from "@/utils/websocket.js";


onMounted(() => {
  sendWebsocket(wsMessage, wsError);
});

//富文本框失去焦点
const handleBlur = (e) => {
  // 发起ws数据
  websocketSend(e);
};

// 监听服务器传来的变化
const wsMessage = (data) => {
  const dataJson = data;
  // 这里写拿到数据后的业务代码
  console.log(dataJson)
};

const wsError = () => {
  // 比如取消页面的loading
  console.log("ws连接错误的回调函数");
};

// 页面销毁时关闭ws。因为有可能ws连接接收数据尚未完成,用户就跳转了页面
// 在需要主动关闭ws的地方都可以调用该方法
onBeforeUnmount(() => {
  closeWebsocket();
});

<script>

到了这里,关于在vue项目中webSocket封装(传token)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在vue3中封装使用WebSocket

    上篇文章记录了如何在日常开发过程中引入并使用websocket连接,但是在后续的开发过程中发现之前的写法有点问题,比如说多次引用连接会共用一个心跳,如果一个连接关掉了,后续其他的连接可能被一起关掉等等的bug。 所以在这篇文章里针对上篇文章提供的方法进行改进,

    2024年02月07日
    浏览(40)
  • 基于Vue3封装一个好用的Websocket

    在Vue3中使用Websocket可以让我们轻松地实现实时数据传输。为了方便使用,我们可以封装一个好用的Websocket类。 首先我们需要安装 ws 库来处理Websocket连接,使用以下命令进行安装: 我们可以新建一个 websocket.js 文件,在其中定义一个 Websocket 类,代码如下: 以上代码中,我们

    2024年02月04日
    浏览(89)
  • vue3使用websocket简易封装,包含错误重连机制

    websocket实现的全双工通信,真真太香了,以下是笔者在使用时,自己封装的一个简易js工具。若需要源码,请移步这里 笔者这里会重连3次,重连的过程给与用户提示,3次之后会提示用户手动刷新 这里与后端约定的数据返回,加上type作为接口判断依据,因此这里不一定通用。

    2024年02月11日
    浏览(46)
  • vue2 封装 webSocket 开箱即用(或 uni.connectSocket)

    第一步:    下载 webSocket  第二步:   需要在 main.js 中 引入  第三步:     封装相关的连接和断开    相关代码!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  第四步:  引入使用 到这步接收信息已经OK了(记得和后端配合)    使用

    2024年02月09日
    浏览(46)
  • Vue3封装全局WebSocket;全局可监听、可发送、心跳处理等;

    操作如下 可以在多个页面多个组件中进行监听/发送 代码简介 方便; 首先安装 tools-javascript 以及 tools-vue3 根据你的业务需求初始化 ws 在你的任何文件中直接调用即可 附加篇(也可不读 直接看文档 )

    2024年02月11日
    浏览(41)
  • ai问答:vue3+pinia+WebSocket 封装断线重连(实战)

    把 Socket 实例 挂载到全局 为方便梳理,请忽略 typescript ,一切尽在注释中 Socket封装(断线重连) 这个 WebSocket 类封装了 WebSocket 的连接、重连、发送数据等方法。 在 connect 方法中,它会连接 WebSocket ,并绑定相关事件监听。 在 onclose 事件中,它会调用 reconnect 方法进行重连。 recon

    2024年02月03日
    浏览(53)
  • vue项目中使用websocket连接后立马断开(websocket连接后瞬间断开)

    问题原因(连接后断连的原因):前端给后端传递Authourization(token验证)时,后端需要接收处理并设置响应标头,不然就容易出现上叙错误; 解决方法: 1、传递参数和验证权限; 2、后端处理后前端收到的响应标头;  然后,连接后断连的问题就解决啦!感觉有用,就一键

    2024年02月11日
    浏览(46)
  • 【Vue项目实战】之WebSocket消息监听

    前言 哈喽!CSDN! 很久以前有位好朋友就建议来CSDN做一些笔记,直到最近又被提醒了一次,这次终于想起来了, 好习惯还是需要一个好的开始 ╭(●`∀´●)╯,感谢这位好朋友让我拥有这个好习惯 ╭(′▽ )╭(′▽ )╯ 这位好朋友的博客链接如下: 点击进入 由于业务需求

    2024年01月17日
    浏览(38)
  • vue项目中如何使用websocket(步骤)

    WebSocket是一种在单个TCP连接上进行全双工通信的协议。Vue是一种流行的JavaScript框架,用于构建用户界面。 结合WebSocket和Vue,可以实现实时数据通信和动态更新UI的效果 。 在本教程中,我们将学习如何在Vue应用程序中使用WebSocket。 步骤1:安装WebSocket库 使用npm安装WebSocket库。

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包