midway使用socketio跨域踩坑记录

434 阅读2分钟

问题背景:想练习一下socket使用,用midway搭建了一个一体化项目,使用过程中出现了前端跨域问题,用了官网的cors解决不了,网上找了很多方法也不适用,很是头疼,还好最后成功解决

解决思路:首先我把前端配置做了一个跨域代理,发现消息能发送到后端,但还是报错,把后端也做了跨域配置,没什么效果发现,后面几经波折,把后端的代理参数全部删了,发现可以了,初步估计是请求头问题,因为官方给的跨域方案不包含请求头的,配置提示也没有改选项!

解决方法:直接把后端跨域打开就行,不配参数,盲猜不配默认配置是全允许

// config.default
export default {
  socketIO: {
    cors: {
     // origin: "http://localhost:8080",
     // methods: ["GET", "POST"]
      allowedHeaders: ["cess-Control-Allow-Origin"] 
     //经过验证一下加上这句请求头就可以 或者全部不配置 打开cors就行cors:{}留空,如果配置了其他项没添加这项还是会报错,就是被这个折磨了
    }
  }
}

其他方法:顺便记录一下其他解决方法1- 说是重新配端口

const _io = require('socket.io')(server)
_io.listen(12312)

2-看到有人说查文档发现部署到服务器必须写真实服务器 ip 地址,不能写 hostname

const socket = io('ws://xxxx.xxxx.xxxx.xxxx:4000') 

3-在我们初始化 socket.io 的时候 加上一句 cors:true

// socket 初始化
const io = require("socket.io")(server, { cors: true })

4-重新下载 socket.io-client

npm i socket.io-client -s

看到篇博客说客户端中 import io from 'socket.io-client' 引入的 socket.io-client 是包含在 socket.io 中的,我之前也没有单独安装 socket.io-client 依赖,也是直接 npm install socket.io,现在的意思就是 socket.io 中包含的 socket.io-client 与我们要用的 socket.io-client 不同,需要重新下载。