下面我将详细讲解“vue-socket.io跨域问题有效解决方法”的完整攻略。
1. 问题描述
在使用vue和socket.io进行开发的过程中,可能会遇到跨域问题。具体表现为,当使用前端http://localhost:8080
访问后端http://localhost:3000
时,会在控制台中出现如下错误信息:
Access to XMLHttpRequest at 'http://localhost:3000/socket.io/?EIO=3&transport=polling&t=1630211352888-0' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
2. 解决方案
解决跨域问题比较多,下面介绍一种较为简单的方法。
2.1 安装cors模块
在后端中使用cors
模块,用于允许跨域请求。
npm install --save cors
2.2 引入cors模块
在后端代码中引入cors
模块。
const cors = require('cors')
app.use(cors());
2.3 修改socket io连接地址
在前端和后端的socket io连接代码中修改连接地址,将地址中的http://
改为ws://
。
示例一
前端代码:
import Vue from 'vue'
import VueSocketIO from 'vue-socket.io'
import io from 'socket.io-client'
Vue.use(
new VueSocketIO({
debug: true,
connection: io('ws://localhost:3000')
})
)
后端代码:
const io = require('socket.io')(server, {
cors: {
origin: '*'
}
})
io.on('connection', (socket) => {
console.log('a user connected')
})
server.listen(port, () => {
console.log(`Server running on port ${port}...`)
})
示例二
前端代码:
import Vue from 'vue'
import VueSocketIO from 'vue-socket.io'
import io from 'socket.io-client'
Vue.use(
new VueSocketIO({
debug: true,
connection: io('ws://localhost:3000', {
transports: ['websocket', 'polling']
})
})
)
后端代码:
const io = require('socket.io')(server, {
cors: {
origin: '*'
}
})
io.on('connection', (socket) => {
console.log('a user connected')
})
server.listen(port, () => {
console.log(`Server running on port ${port}...`)
})
3. 总结
以上就是本文介绍的“vue-socket.io跨域问题有效解决方法”的完整攻略。通过引入cors
模块,并将socket io连接地址中的http://
改为ws://
,即可有效解决跨域问题。希望对大家有所帮助!