浅谈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 相关文章推荐
nodejs win7下安装方法
May 24 NodeJs
用nodejs写的一个简单项目打包工具
May 11 NodeJs
nodejs获取本机内网和外网ip地址的实现代码
Jun 01 NodeJs
Nodejs sublime text 3安装与配置
Jun 19 NodeJs
基于 Docker 开发 NodeJS 应用
Jul 30 NodeJs
Nodejs获取网络数据并生成Excel表格
Mar 31 NodeJs
用nodejs搭建websocket服务器
Jan 23 NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 NodeJs
详解nodejs微信jssdk后端接口
May 25 NodeJs
nodejs创建简易web服务器与文件读写的实例
Sep 07 NodeJs
搭建一个nodejs脚手架的方法步骤
Jun 28 NodeJs
详解NodeJS模块化
Jun 15 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
PHP自动生成后台导航网址的最佳方法
2013/08/27 PHP
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
php微信开发之自定义菜单实现
2016/11/18 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
google地图的路线实现代码
2009/08/20 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
js实时监听文本框状态的方法
2011/04/26 Javascript
基于JQuery的抓取博客园首页RSS的代码
2011/12/01 Javascript
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
vue实现日历表格(element-ui)
2020/09/24 Javascript
Python使用正则匹配实现抓图代码分享
2015/04/02 Python
PyQt5实现下载进度条效果
2018/04/19 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
python执行精确的小数计算方法
2019/01/21 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
Django项目后台不挂断运行的方法
2019/08/31 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
python 星号(*)的多种用途
2020/09/21 Python
HTML5 拖拽批量上传文件的示例代码
2018/03/28 HTML / CSS
学习十八大精神心得体会
2013/12/31 职场文书
公司户外活动总结
2014/07/04 职场文书
《中国梦我的梦》小学生演讲稿
2014/08/20 职场文书
新婚姻法离婚协议书范文
2014/11/30 职场文书
新员工入职欢迎词
2015/01/23 职场文书
三傻大闹宝莱坞观后感
2015/06/03 职场文书
安全教育主题班会总结
2015/08/14 职场文书
pytorch 如何把图像数据集进行划分成train,test和val
2021/05/31 Python
手残删除python之后的补救方法
2021/06/26 Python