【发布时间】:2021-04-19 23:17:45
【问题描述】:
我构建了一个服务器和客户端。 客户端正在尝试通过套接字连接到服务器但是我在控制台中收到以下错误:
Access to XMLHttpRequest at 'http://localhost:5000/socket.io/?EIO=4&transport=polling&t=NS2s-Z_' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
服务器:
const express = require('express');
const socketio = require('socket.io');
const http = require('http');
const PORT = process.env.PORT || 5000;
const router = require('./router');
const app = express();
const server = http.createServer(app);
const io = socketio(server);
io.on('connection',(socket) =>{
console.log('[Server] We have new connection !!!');
socket.on('disconnect',()=>{
console.log('[Server] WeUser has left !!!')
});
});
app.use(router);
server.listen(PORT,()=>{
console.log(`[Server] has started listen on port ${PORT}`);
});
客户:
let socket;
const Chat= ({location}) =>{
const ENDPOINT ='localhost:5000';
const [name,setName] = useState('');
const [room,setRoom] = useState('');
useEffect(()=>{
const {name,room} = queryString.parse(location.search) // get url
socket = io(ENDPOINT);
//Update state with new name and room
setName(name);
setRoom(room);
console.log(socket);
// socket.emit('ERROR');
},[ENDPOINT,location.search]);
return (<h1>Chat</h1>);
}
起初,我确定问题在于服务器与客户端请求不在同一个端口上。但遗憾的是,事实并非如此。
编辑: 我已经将两个端口都更改为 3000 并且它似乎可以工作,但是,对于任何其他端口它都不是。有没有办法因为操作系统权限,客户端无法发送 ack 到连接
【问题讨论】:
-
您确定不是因为端口号不同吗? Different port numbers, if specified, mean different origins,所以,CORS。
-
也许我错了,我已经将服务器端口更改为 3000 并将客户端 ENDPOINT 更改为 localhost:3000,并且它的工作原理。有没有办法与OS相关的问题?
-
您的操作系统可能会阻止对端口 5000 的请求,是的。检查您的防火墙设置。
标签: node.js reactjs express socket.io