【发布时间】:2021-01-23 12:54:45
【问题描述】:
我想将 Socket.io 与 React 前端和 NodeJS & Express 后端一起使用,但它们都在不同的端口上运行以进行开发(Fontend:3000;后端:8080)。
当 Socket.io-Client 加载后,我的前端执行 var socket = io('http://localhost:8080');,然后自动向 http://localhost:8080/socket.io/?EIO=4&transport=polling&t=NSlH7of 发出 GET 请求。该请求通常应该返回类似 0{"sid":"XXX","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000} 的内容,但 Chrome 开发工具说状态是 (failed) net::ERR_FAILED。开发工具中也没有可用的响应。
但是,当我在我的 HTTP 客户端中运行 GET 请求时,它返回的正是我期望它返回的内容。
该错误看起来像是由 Socket.io-Client 引起的,但除了失败的 GET 请求之外,我没有收到任何错误。当我在一个端口上运行所有内容时(前端由后端的 webpack 提供服务),请求按预期通过。
如果有任何帮助,我将不胜感激!谢谢!
server.js
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
//Serve static react app
app.use(express.static('dist'));
app.use('/app', express.static('dist'));
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname + '../../../' + '/dist/index.html'));
});
io.on('connection', (socket) => {
console.log('Connected')
socket.on('join-game', (gameId, userId) => {
console.log(gameId, userId);
})
})
http.listen(process.env.PORT || 8080, () => {
console.log(`Listening on port ${process.env.PORT || 8080}!`);
});
【问题讨论】:
标签: node.js express sockets socket.io