【发布时间】:2022-01-02 07:35:37
【问题描述】:
我正在使用 react js、node 和 socket.io 构建一个实时聊天应用程序。但是我收到了 WebSocket 连接失败的错误。
我正在尝试控制台记录我输入的房间的名称并提交它应该在控制台上。但它显示此错误:WebSocket connection to 'ws://localhost:5000/socket.io/?EIO=3&transport=websocket' failed:
我的服务器已启动并正在运行。
这是我的客户端。
import {UserContext} from '../../UserContext';
import {Link} from 'react-router-dom';
import RoomList from './RoomList';
import io from 'socket.io-client';
let socket;
const Home = () => {
const ENDPT = 'localhost:5000';
useEffect(() => {
socket = io(ENDPT ,{
cors: {
origin: "http://localhost:5000",
credentials: true
},transports : ['websocket'] });
return () => {
socket.emit('disconnect');
socket.off();
}
}, [ENDPT]);
const { user,setUser } = useContext(UserContext);
const [room , setRoom] = useState('');
const handleSubmit = (e) => {
e.preventDefault();
socket.emit('creat-room' , room);
console.log(room);
setRoom('');
}
const rooms = [
{
name:"room1",
_id:"123"
},
{
name:"room2",
_id:"456"
}
]
const setAsJohn = () => {
const john = {
name : "john",
email : "john@emai.com",
password: "123",
id: "123",
}
setUser(john);
}
const setAsTom = () => {
const tom = {
name : "tom",
email : "tom@emai.com",
password: "456",
id: "456",
}
setUser(tom);
}
return (
<div>
<div className="row">
<div className="col s12 m6">
<div className="card blue-grey darken-1">
<div className="card-content white-text">
<span className="card-title">Welcome {user ? user.name : ""}</span>
<form onSubmit={handleSubmit}>
<div className="row">
<div className="input-field col s12">
<input id="room" type="text" className="validate" placeholder='Enter room name' value={room} onChange={e => setRoom(e.target.value)}/>
<label htmlFor="room">Room</label>
</div>
</div>
<div className='btn'>Creat Room</div>
</form>
</div>
<div className="card-action">
<a href='#' onClick={setAsJohn}>John</a>
<a href='#' onClick={setAsTom}>Tom</a>
</div>
</div>
</div>
<div className='col s6 m5 offset-1'>
<RoomList rooms={rooms}/>
</div>
</div>
<Link to={"/chat"}>
<button>Go to Chat</button>
</Link>
</div>
)
}
export default Home
这是我的服务器端代码
const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const socketio = require('socket.io');
const io = socketio(http);
const PORT = process.env.PORT || 5000;
app.get("/" , (req,res) => {
res.send("Helloji")
})
io.on('connection', (socket) => {
console.log('a user connected');
socket.on('creat-room' , name =>{
console.log('Then room name received is ' , name);
})
});
server.listen(PORT, () => {
console.log(`listening on http://localhost:${PORT}`);
});```
【问题讨论】:
-
const PORT = process.env.PORT || 5000;服务器在监听哪个端口? -
服务器监听 5000 端口,客户端运行 3000 端口
标签: javascript node.js reactjs websocket