无法连接 socket.io 节点服务器以响应前端。“POST http://localhost:3000/socket.io/?EIO=3&transport=polling&t=MoHNIJT 404(未找到)”

IT技术 javascript node.js reactjs express socket.io
2021-05-27 14:36:11

我在 react 中创建了一个前端,在 express nodejs 中创建了一个后端,并且我正在使用 socket.io 来让客户端和服务器进行通信。

当我加载react页面时,我每秒都会收到以下错误:

Failed to load resource: the server responded with a status of 404 (Not Found)

我已将前端设置为在端口 3000 上运行,将服务器设置为在端口 3500 上运行。失败的连接请求正在发送到以下地址: http://localhost:3000/socket.io/?EIO=3&transport=polling&t=MoHUt8D

以下是节点后端的设置:

const bodyParser = require('body-parser');
const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();

app.use(bodyParser.json());
app.use(function(req, res, next) {
  res.header('Access-Control-Allow-Origin', 
'https://www.localhost:3000');
  res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  res.header('Access-Control-Allow-Methods', 'GET, POST, DELETE, PATCH, PUT');
  res.header('Access-Control-Allow-Credentials', 'true');
  next();
});

const server = https.createServer(app);
var io = require('socket.io')(server);

console.log('Server listening on port 3500.');
server.listen(3500);

客户端连接如下:

import openSocket from "socket.io-client";
const hostURL = "http://localhost:3500";
const socket = openSocket()

关于如何停止错误并使前端和后端与 socket.io 一起工作的任何建议

1个回答

您需要使用http图书馆而不是图书馆https

server.listen(3500)不支持https。如果由于某种原因您确实需要使用它,您可以参考这个答案

此外,您的客户端上你需要告诉套接字库的主机的URL,否则将默认为window.location提到这里的文档似乎正如你所提到的请求被指向是你的情况localhost:3000,你的服务器上localhost:3500,从而改变这

import openSocket from "socket.io-client";
const hostURL = "http://localhost:3500";
const socket = openSocket()

对此

import openSocket from "socket.io-client";
const hostURL = "http://localhost:3500";
const socket = openSocket(hostURL)