Abt*_*med 0 sockets node.js reactjs
我们使用 CORS 来允许所有来源
app.use(cors());
Run Code Online (Sandbox Code Playgroud)
服务器运行在4000端口,客户端运行在3000端口
这是我的server.js代码
const cors = require("cors");
const http = require("http");
const socketIO = require("socket.io");
app.use(cors());
const port = process.env.PORT || process.env.DEFAULT_PORT;
console.log("port: ", port);
app.listen(port, () => {
console.log(`App listening at ${port}...`);
});
const server = http.createServer(app);
const io = new socketIO(server, {
transports: ["websocket"],
});
Run Code Online (Sandbox Code Playgroud)
反应js代码
constructor(props) {
super(props);
try {
this.socket = io("http://localhost:4000", { transport: ["websocket"] });
this.socket.on("Chat-event", data => {
console.log("socketdata", data);
});
} catch (error) {
console.log("hiterror", error)
}
}
Run Code Online (Sandbox Code Playgroud)
在允许所有人的来源后,我不断在客户端收到此错误。
从源“ http://localhost: 3000”访问“ http://localhost:4000/socket.io/?EIO=3&transport=polling&t=Mv-SSIc ”处的XMLHttpRequest已被 CORS 策略阻止:当请求的凭据模式为“include”时,响应中的“Access-Control-Allow-Origin”标头不得为通配符“*”。XMLHttpRequest发起请求的凭证模式由withCredentials属性控制
小智 5
对于 socket.io 版本 3.xx cors 配置已更改,我设法通过向套接字创建添加选项来修复它。也尝试过 2.xx 版本,它有效。
const io = socketio(httpServer, {
cors: {
origin: "http://localhost:3000",
methods: ["GET", "POST"],
credentials: true
}
});
Run Code Online (Sandbox Code Playgroud)
这是资源https://socket.io/docs/v3/handling-cors/
额外好处:如果您遇到错误请求,请确保客户端和服务器具有相同版本的 socket.io。