Vue中使用WebSocket实现前后端实时通讯

一、使用TypeScript配置Vue项目

在Vue项目中使用TypeScript,需要先进行相关配置,以下是一些基本配置:


// 安装相关依赖
npm install --save-dev typescript ts-loader

// 添加vue-shim.d.ts文件
declare module "*.vue" {
  import Vue from "vue";
  export default Vue;
}

接下来,需要在webpack.config.js文件中添加相关配置:


// 引入webpack模块
const webpack = require('webpack');

module.exports = {
  entry: './src/index.ts',
  output: {
    filename: 'bundle.js',
    path: __dirname + '/dist'
  },
  resolve: {
    extensions: ['.ts', '.js', '.vue', '.json'],
    alias: {
      'vue$': 'vue/dist/vue.esm.js'
    }
  },
  module: {
    rules: [
      {
        test: /\.ts$/,
        loader: 'ts-loader',
        exclude: /node_modules/,
        options: {
          appendTsSuffixTo: [/\.vue$/],
        }
      }
    ]
  },
  plugins: [
    new webpack.ProvidePlugin({
      $: 'jquery',
      jQuery: 'jquery'
    })
  ]
};

二、前端Vue中使用WebSocket

1、使用Vue插件vue-native-websocket

第一种使用WebSocket的方法,是使用Vue插件vue-native-websocket。

首先需要在项目中安装该插件:


npm install vue-native-websocket --save

接下来,在main.js文件中添加以下代码:


import VueNativeSock from 'vue-native-websocket'
Vue.use(VueNativeSock, 'ws://localhost:8080/ws', {
  store: store,
  format: 'json',
  connectManually: true
})

上述代码中,第一参数表示WebSocket的地址,第二个参数是个对象,包括store、format和connectManually等属性。

接下来,在Vue组件中,可以这样使用WebSocket:


import { mapState } from 'vuex'
export default {
  computed: {
    ...mapState({
      socket: state => state.socket.socket
    })
  },
  methods: {
    send () {
      const msg = JSON.stringify({type: 'message', data: this.msgToSend})
      this.socket.send(msg)
      this.msgToSend = ''
    }
  }
}

上述代码中,通过computed属性,将socket对象映射到组件中。send方法,可以向WebSocket服务器发送数据。

2、手动实现WebSocket

在Vue项目中手动实现WebSocket,也是一种常见的做法。

首先,需要新建一个WebSocket Vue组件:


<template>
  <div>
  </div>
</template>

<script>
  export default {
    data () {
      return {
        ws: null
      }
    },
    mounted () {
      this.initWebsocket()
    },
    beforeDestroy () {
      this.closeWebsocket()
    },
    methods: {
      initWebsocket () {
        this.ws = new WebSocket('ws://localhost:8080/ws')
        this.ws.onopen = (event) => {
          console.log('open', event)
          this.sendMessage('hello world')
        }
        this.ws.onmessage = (event) => {
          console.log('message', event)
        }
        this.ws.onerror = (event) => {
          console.log('error', event)
        }
        this.ws.onclose = (event) => {
          console.log('close', event)
          this.ws = null
        }
      },
      closeWebsocket () {
        if (this.ws) {
          this.ws.close()
        }
      },
      sendMessage (message) {
        if (this.ws) {
          this.ws.send(message)
        }
      }
    }
  }
</script>

上述WebSocket组件,通过initWebsocket方法,初始化WebSocket的连接,通过sendMessage方法,向WebSocket服务器发送数据,通过closeWebsocket方法,关闭WebSocket连接。

三、Vue中使用axios

1、axios发送GET请求

使用axios发送GET请求,需要引入axios,并调用其get方法。


import axios from 'axios'

axios.get('http://localhost:3000/users')
  .then(response => {
    console.log(response)
  })
  .catch(error => {
    console.log(error)
  })

上述代码中,我们向http://localhost:3000/users发送了一个GET请求,并在成功或失败时,分别打印了response或error。

2、axios发送POST请求

使用axios发送POST请求,需要调用axios的post方法。


import axios from 'axios'

axios.post('http://localhost:3000/users', {
    name: 'John Smith',
    age: '25'
  })
  .then(response => {
    console.log(response)
  })
  .catch(error => {
    console.log(error)
  })

上述代码中,我们向http://localhost:3000/users发送了一个POST请求,并以JSON格式,向服务器传递了一个{name: ‘John Smith’, age: ’25’}的对象。

3、axios拦截器

在axios中,拦截器是一种重要的概念。拦截器可以在请求或响应被处理前,对其进行拦截或处理。

以下是一个拦截器的示例代码:


import axios from 'axios'

axios.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

上述代码中,我们使用了axios的request拦截器,对请求进行了拦截,并在请求头中添加了Authorization属性。

原创文章,作者:EPBTW,如若转载,请注明出处:https://www.506064.com/n/332521.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
EPBTW的头像EPBTW
上一篇 2025-01-24 18:46
下一篇 2025-01-24 18:46

相关推荐

  • 使用Vue实现前端AES加密并输出为十六进制的方法

    在前端开发中,数据传输的安全性问题十分重要,其中一种保护数据安全的方式是加密。本文将会介绍如何使用Vue框架实现前端AES加密并将加密结果输出为十六进制。 一、AES加密介绍 AE…

    编程 2025-04-29
  • Vue TS工程结构用法介绍

    在本篇文章中,我们将从多个方面对Vue TS工程结构进行详细的阐述,涵盖文件结构、路由配置、组件间通讯、状态管理等内容,并给出对应的代码示例。 一、文件结构 一个好的文件结构可以极…

    编程 2025-04-29
  • Cookie是后端生成的吗?

    是的,Cookie通常是由后端生成并发送给客户端的。下面从多个方面详细阐述这个问题。 一、什么是Cookie? 我们先来简单地了解一下什么是Cookie。Cookie是一种保存在客…

    编程 2025-04-28
  • Avue中如何按照后端返回的链接显示图片

    Avue是一款基于Vue.js、Element-ui等技术栈的可视化开发框架,能够轻松搭建前端页面。在开发中,我们使用到的图片通常都是存储在后端服务器上的,那么如何使用Avue来展…

    编程 2025-04-28
  • Vue3的vue-resource使用教程

    本文将从以下几个方面详细阐述Vue3如何使用vue-resource。 一、安装Vue3和vue-resource 在使用vue-resource前,我们需要先安装Vue3和vue…

    编程 2025-04-27
  • Vue模拟按键按下

    本文将从以下几个方面对Vue模拟按键按下进行详细阐述: 一、Vue 模拟按键按下的场景 在前端开发中,我们常常需要模拟按键按下的场景,比如在表单中填写内容后,按下“回车键”提交表单…

    编程 2025-04-27
  • ThinkPHP6 + Vue.js: 不使用Fetch的数据请求方法

    本文将介绍如何在ThinkPHP6和Vue.js中进行数据请求,同时避免使用Fetch函数。 一、AJAX:XMLHttpRequest的基础使用 在进行数据请求时,最基础的方式就…

    编程 2025-04-27
  • 小波特掘金——从前端到后端的全栈开发之路

    本文将从小波特掘金平台的概述、前端和后端技术栈、以及实例代码等多个方面来探讨小波特掘金作为一个全栈开发工程师的必练平台。 一、平台概述 小波特掘金是一个前后端分离式的技术分享社区,…

    编程 2025-04-27
  • 开发前端程序,Vue是否足够?

    Vue是一个轻量级,高效,渐进式的JavaScript框架,用于构建Web界面。开发人员可以使用Vue轻松完成前端编程,开发响应式应用程序。然而,当涉及到需要更大的生态系统,或利用…

    编程 2025-04-27
  • 后端接口设计开发经验分享

    在受到前端某些限制或特殊需求时,后端接口的设计和开发显得尤为重要。下面从以下几个方面进行讲述。 一、命名规范 合理的命名规范可以大大提高接口的可读性和可维护性。以下是一些命名规范的…

    编程 2025-04-27

发表回复

登录后才能评论