You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Socket.io连接Node.js Express服务器遇CORS问题无法访问

Socket.io跨域CORS问题解决

我尝试用socket.io在已连接用户之间传输数据,本地Vue客户端对接Node.js Express服务器时出现以下CORS错误:

从源'http://localhost:8080'访问'http://localhost:3000/socket.io/?EIO=4&transport=polling&t=Od4xImE'的XMLHttpRequest已被CORS策略阻止:请求的资源上不存在'Access-Control-Allow-Origin'标头。

直接访问该链接返回内容正常:

0{"sid":"vbn04o2Bp2_RWhO_AAAX","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":20000,"maxPayload":1000000}

试过多种CORS配置方法仍无法解决,附上当前服务器和客户端代码:

服务器代码

const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const { Server } = require('socket.io');
const io = new Server(server);
const cors = require('cors');

app.use(cors({
  origin: 'http://localhost:8080'
}));

io.on("connection", (socket) => {
  console.log("A user connected");

  socket.on("message", (data) => {
    console.log("Recieved message: ", data);
    io.emit("message", data);
  });

  socket.on("disconnect", () => {
    console.log("A user disconnected");
  });
});

app.get('/', (req, res) => {
  res.send('Hello, this is the root route!');
});

const PORT = 3000;

server.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

客户端代码

import Vue from "vue";
import App from "./App.vue";
import vuetify from "./plugins/vuetify";
import router from "../router";
import io from 'socket.io-client';

Vue.config.productionTip = false;

const socket = io('http://localhost:3000');

Vue.prototype.$socket = socket;

new Vue({
  vuetify,
  router,
  render: (h) => h(App),
}).$mount("#app");

解决方法

问题核心是你仅给Express应用配置了CORS中间件,但socket.io的握手请求并不经过Express的中间件链,必须直接给socket.io实例配置CORS规则。

修改服务器代码中socket.io的初始化代码:

// 替换原来的const io = new Server(server);
const io = new Server(server, {
  cors: {
    origin: "http://localhost:8080",
    methods: ["GET", "POST"]
  }
});

修改后,socket.io会在握手请求中自动添加正确的CORS响应头,客户端即可正常建立连接。Express的cors中间件可以保留,用于处理其他API接口的跨域请求。

内容的提问来源于stack exchange,提问作者Crazy_Quackers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 02:46:07