浅谈vue websocket nodeJS 进行实时通信踩到的坑


Posted in NodeJs onSeptember 22, 2020

先说明,我并不知道出现坑的原因是什么。我只是按照别人的写法就连上了。

我的处境是这样的

我的前台是用了 vue 全家桶,启动了一个 9527 端口。

而我的后台是用 nodeJS,启动了 8081 端口。

很明显,这种情况就出现了头疼的跨域。

贴出我的代码,如下

server.js(后台)

var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
io.sockets.on('connection', (socket) => {
 console.log('123')
});

main.js(前台)

import VueSocketio from 'vue-socket.io'
import socketio from 'socket.io-client'
Vue.use(VueSocketio, socketio('http://localhost:8081'), store)

然后根据网上的写法,我在后端对跨域进行了处理

app.all('*',function (req, res, next) {
 res.header('Access-Control-Allow-Origin', 'http://localhost:9527');
 res.header('Access-Control-Allow-Headers', 'X-Token, Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
 res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
 if (req.method == 'OPTIONS') {
 res.send(200); /*让options请求快速返回*/
 }
 else {
 next();
 }
});

满心欢喜的重启前台看下有没有脸上。

结果出现了一下错误

浅谈vue websocket nodeJS 进行实时通信踩到的坑

Failed to load http://localhost:8081/socket.io/?EIO=3&transport=polling&t=MAqqfjf: The value of the 'Access-Control-Allow-Credentials' header in the response is '' which must be 'true' when the request's credentials mode is 'include'. Origin 'http://localhost:9527' is therefore not allowed access. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

这个错误。。我看得出是是 “Access-Control-Allow-Credentials” 的问题。所以我又改了后台的跨域代码

app.all('*',function (req, res, next) {
 res.header('Access-Control-Allow-Origin', 'http://localhost:9527');
 res.header('Access-Control-Allow-Headers', 'X-Token, Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild');
 res.header('Access-Control-Allow-Methods', 'PUT, POST, GET, DELETE, OPTIONS');
 res.header('Access-Control-Allow-Credentials','true'); // 新增
 if (req.method == 'OPTIONS') {
 res.send(200); /*让options请求快速返回*/
 }
 else {
 next();
 }
});

更改过后,我又满心欢喜的跑去前台,一看

结果就一直报错:

浅谈vue websocket nodeJS 进行实时通信踩到的坑

GET http://localhost:8081/socket.io/?EIO=3&transport=polling&t=MAqp7zN 404 (Not Found)

GET http://localhost:8081/socket.io/?EIO=3&transport=polling&t=MAqp7zN 404 (Not Found)

报错了这个是 404 。

百度了很久, 各种关键字都搞不了。最后去 google 了。结果让我找到了答案:

浅谈vue websocket nodeJS 进行实时通信踩到的坑

看了上面这个答案,我翻查了一下,正好我也是用 express4 的。所以我就按照他的说法去改。结果如下。

正确的写法

后端

var server = app.listen(8081); 
var io = require('socket.io').listen(server);
io.sockets.on('connection', (socket) => {
 console.log('123')
});

前端的写法不变。

思考点

虽然我不知道背后发生了什么事(因为是赶项目,赶鸭子上架写 node 和 vue 的,本人是 Java 开发),但是我还是觉得有几个点要注意的:

1、关于 Express 4 和 其他版本中,socketio 的写法不同,少了一个 http 模块。所以我认为是出现这种情况的主要原因

2、注意跨域的写法。四行代码,最好能够保存下来。

3、如果是本地测试的,需要注意 IP 问题。如果是 localhost 的,请前后端一直;如果是 127.0.0.1,请前后端一致。

以上这篇浅谈vue websocket nodeJS 进行实时通信踩到的坑就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
使用forever管理nodejs应用教程
Jun 03 NodeJs
nodejs命令行参数处理模块commander使用实例
Sep 17 NodeJs
Nodejs Stream 数据流使用手册
Apr 17 NodeJs
Nodejs抓取html页面内容(推荐)
Aug 11 NodeJs
使用nodejs中httpProxy代理时候出现404异常的解决方法
Aug 15 NodeJs
详解Nodejs基于mongoose模块的增删改查的操作
Dec 21 NodeJs
用nodejs搭建websocket服务器
Jan 23 NodeJs
深入解析nodejs HTTP服务
Jul 25 NodeJs
nodejs使用express获取get和post传值及session验证的方法
Nov 09 NodeJs
nodejs实现OAuth2.0授权服务认证
Dec 27 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
深入理解nodejs搭建静态服务器(实现命令行)
Feb 05 NodeJs
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
Aug 20 #NodeJs
浅谈使用nodejs搭建web服务器的过程
Jul 20 #NodeJs
通过实例了解Nodejs模块系统及require机制
Jul 16 #NodeJs
Nodejs环境实现socket通信过程解析
Jul 03 #NodeJs
使用nodejs实现JSON文件自动转Excel的工具(推荐)
Jun 24 #NodeJs
nodejs各种姿势断点调试的方法
Jun 18 #NodeJs
在NodeJs中使用node-schedule增加定时器任务的方法
Jun 08 #NodeJs
You might like
如何使用PHP中的字符串函数
2006/10/09 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
2020/09/17 PHP
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
javaScript中Math()函数注意事项
2015/06/18 Javascript
快速掌握Node.js事件驱动模型
2016/03/21 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
详解Vue CLI3配置之filenameHashing使用和源码设计使用和源码设计
2018/08/31 Javascript
jquery.pagination.js分页使用教程
2018/10/23 jQuery
vue.js实现简单购物车功能
2020/05/30 Javascript
vue根据条件不同显示不同按钮的操作
2020/08/04 Javascript
[51:53]完美世界DOTA2联赛循环赛 LBZS vs DM BO2第二场 11.01
2020/11/02 DOTA
Python多线程threading和multiprocessing模块实例解析
2018/01/29 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
Python实现Event回调机制的方法
2019/02/13 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
IE滤镜与CSS3效果(详细整理分享)
2013/01/25 HTML / CSS
你不知道的5个HTML5新功能
2016/06/28 HTML / CSS
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
html5启动原生APP总结
2020/07/03 HTML / CSS
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
介绍一下XMLHttpRequest对象
2012/02/12 面试题
毕业生自荐信的主要内容
2013/10/29 职场文书
员工工作表扬信范文
2014/01/13 职场文书
民族团结先进集体事迹材料
2014/05/22 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
先进典型发言材料
2014/12/30 职场文书
2016继续教育研修日志
2015/11/13 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书
数据库之SQL技巧整理案例
2021/07/07 SQL Server
Java spring定时任务详解
2021/10/05 Java/Android