vue中SocketIO的正确使用方法,并且解决跨域问题

第一步 创建nodeJS的http服务器,作为socket服务端

新建文件夹,命名为NodejsScoketDemo,然后使用终端,npm init ,一路回车即可

加入express依赖和socket.io依赖

npm install express socket.io

这是我使用的依赖版本

工程目录如图:

socket.js代码

const express = require('express');
const http = require('http');
const socketIO = require('socket.io');
const app = express();
const server = http.createServer(app);

const io = socketIO(server,{
    cors: {
        origin: '*'
    }
});

io.on('connection',(socket) => {
    console.log('user connected');
    socket.on('hello',(data) => {
        console.log(`收到客户端的消息:${data}`);
    })
});


app.get('/',(request, response) => {
    /*在浏览器发送 http://127.0.0.1:24000 的请求,客户端定义了监听'message'的socket,所以可以接收消息,即使客户端有代码 
        io.on('message',(data) => {
            console.log(data);
        });
    */
    io.emit('message','服务端向客户端推送消息...');
    response.writeHead(200, {"Content-type": "text/plain"});
    response.end();
});


server.listen(24000,() => {
    console.log("server is up and running on port 24000");
});

谷歌度娘,十有八九都是说配置前端的config目录下的index.js文件的代理,结果都是无效的,仍然报跨域被阻止的错误,其实关键不是说这个代理不用设置,要设置。关键在

(下边这块代码仅用来说明展示,上面已经有了,不用再重复写了)

 

const io = socketIO(server,{
    cors: {
        origin: '*'
    }
});

那么这时候,我们就可以直接使用命令启动socket.js ,开启http服务器,并且监听24000端口

node src/socket/socket.js

 

第二步 创建vue-cli脚手架,作为socket客户端

npm init webpack vuesocketdemo

引入依赖

npm install vue-socket.io socket.io-client

这些是我引入的依赖版本,理论上,只引入socket.io-client 依赖就够了

我们在main.js导入依赖,并且使用它,SocketIO里面填写ws://IP:监听的服务器端口

import VueSocketIO from 'vue-socket.io'
import SocketIO from 'socket.io-client'

Vue.use(new VueSocketIO({
  debug: true,
  connection: SocketIO('ws://127.0.0.1:24000')
}));

接下来,我们在conifg的index.js文件中配置代理,注意,第二个代理路劲的ws属性必须设置为false,否则还会报跨域被阻止的错误

proxyTable: {
  '/socket.io':{
    target: 'http://127.0.0.1:24000/', // target host
    changeOrigin: true, // needed for virtual hosted sites
    logLevel: 'debug'
  },
  '/sockjs-node': {
    target: 'http://127.0.0.1:24000',
    ws: false,
    changeOrigin: true
  }
}

最后,我们在HelloWorld.vue 编写socket代码

在html部分,编写一个按钮和输入框,用来发送消息给服务器

<template>
  <div class="hello">
    <input id="inputArea" type="text">
    <button @click="sendMsgToServer">发送消息给服务端</button>
  </div>
</template>

在javascript部分,连接到服务器,并且编写一个发送输入的消息给服务器的程序

<script>
import io from 'socket.io-client';
const socket = io('http://127.0.0.1:24000');
export default {
  name: 'HelloWorld',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App'
    }
  },
  methods:{
    /*socket.emit('hello','xxx') 表示,服务端上定义了一个监听'hello'的socket,
      即服务端有代码 
      socket.on('hello',(data) => {
        //这是接收到的客户端消息
        console.log(data);
      })
       */
    sendMsgToServer(){
      socket.emit('hello',document.getElementById("inputArea").value);
    }
  },
  created() {
    //一定要移除旧的message监听,否则会出现重复监听的状况
    socket.removeListener('message');
    //这是移除所有监听
    // socket.removeAllListeners();
    socket.on('message',(data) =>{
      console.log(data)
    });
  }
}
</script>

样式部分我就没定义了

 

 

第三步 测试

服务端启动http服务器以监听socket 24000端口

node src/socket/socket.js

启动客户端vue

npm run dev

测试浏览器发送请求给http服务器,委托http服务器把消息推送给客户端

测试客户端发送消息给服务端

代码demo下载:链接: https://pan.baidu.com/s/1gIbU8Z6LmWMiuqsB4riF9Q  密码: 97e1

 

 

  • 19
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
Vue Admin 框架使用 CORS 解决跨域问题可以通过以下步骤: 1. 安装 axios:首先,确保你的项目已经安装了 axios,可以使用以下命令进行安装: ```bash npm install axios --save ``` 2. 创建一个 axios 实例:在你的项目创建一个独立的 axios 实例,用于发送跨域请求。在这个实例,你可以设置一些默认的请求头和其他配置。 ```javascript // src/utils/axios.js import axios from 'axios'; const instance = axios.create({ baseURL: 'https://api.example.com', // 设置请求的基础URL timeout: 5000, // 设置请求超时时间 withCredentials: true, // 允许携带跨域凭证(例如:cookies) }); export default instance; ``` 3. 在需要发送跨域请求的地方使用 axios 实例:在你的组件或其他地方,使用创建的 axios 实例来发送跨域请求。 ```javascript // src/views/Example.vue <template> <div> <button @click="fetchData">Fetch Data</button> </div> </template> <script> import axios from '@/utils/axios'; export default { methods: { fetchData() { axios.get('/data') .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); }, }, }; </script> ``` 在上述示例,我们使用了创建的 axios 实例来发送 GET 请求,并访问了`/data`路径。由于我们已经在 axios 实例设置了基础URL,实际发送的请求将是`https://api.example.com/data`。 请注意,在服务器端也需要设置相应的 CORS 头来允许跨域请求。你可以参考前面提到的服务器端设置响应头部分的示例代码来设置服务器端的 CORS 头。 以上是在 Vue Admin 框架使用 CORS 解决跨域问题的一种方法,你可以根据实际需求和项目结构进行相应的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值