当前位置: 首页 > 知识库问答 >
问题:

为什么在Express和React中使用SocketIO时CORS被阻塞

屈宏爽
2023-03-14

我试图用Node、React、Express和Socket.io开发一个简单的聊天应用程序。

下面是我的节点服务器设置:

const express = require("express");
const cors = require('cors');
const http = require('http');
const socketio = require('socket.io');

// ENV VARS
if (process.env.NODE_ENV !== 'production') {
  require('dotenv').config();
}

const SERVER_PORT = process.env.SERVER_PORT || 5000;
const HOST = process.env.HOST || "http://localhost";

// INIT
const app = express();
const server = http.createServer(app);
const io = socketio(server);

// MIDDLEWARE
app.use(cors());
app.use(express.urlencoded({extended: false}));
app.use(express.json());

io.on('connection', (socket) => {
  console.log('new client connected');
});

// ON LISTEN
server.listen(SERVER_PORT, () => {
  console.log(`app listening at ${HOST}:${SERVER_PORT}`);
});
import {io} from "socket.io-client";
  
import './App.css';

const PORT = 5000
const HOST = "http://localhost"
const SERVER_URL = HOST + ':' + PORT
console.log(SERVER_URL);

function App() {
  let socket = io(SERVER_URL);
  return (
    <div className="App">
      aaaa
    </div>
  );
}

export default App;

我试着补充:

{origins: '*'}

正如socket io doc所说,但错误仍在显示。我做错了什么?

共有1个答案

姬烨磊
2023-03-14

我认为更改初始化顺序可能会有所帮助,因为服务器缺少应用于应用程序的所有中间件。

// INIT
const app = express();

// MIDDLEWARE
app.use(cors());
app.use(express.urlencoded({extended: false}));
app.use(express.json());

// Create server and listen on PORT after adding middleware
const server = app.listen(PORT, () => {
  console.log(`app listening at ${HOST}:${SERVER_PORT}`)
});

// Try to avoid wilcard ('*') origins
const io = socketio(server, { cors: { origin: '*' } });

// Handle socketio connections
io.on('connection', (socket) => {
  console.log('new client connected');
});

// EOF
 类似资料:
  • 我有一个flask socketio服务器,运行在带有nginx的ubuntu上。我有一个客户端调用服务器。当我尝试呼叫服务器时,收到以下错误: 这是我对烧瓶的初始化: ... 这是我当前在nginx中的配置: 来自客户端对服务器的请求如下所示: 我尝试过: -添加允许CORS到位置/仅,以及两者-在烧瓶应用程序中删除/添加allow CORS origin。 有人能帮忙吗?

  • 我有一个在Node开发的API。JS,打字稿听localhost:3001我有一个Angular的前端应用程序,打字稿听localhost:4200 我正在尝试使用ngx-image-cropper上传图像文件,将其转换为base 64,从前端到API。 当补丁(更新)http请求发送到API时,我得到: 访问位于'http://localhost:3001/member/10'从原点'http:

  • 问题内容: 所以当我尝试使用React将数据发送到后端时,我遇到了这个错误。据我了解,我需要允许后端和文件中的通信。这是我使用的一些链接: 没有“访问控制允许来源”-节点/ Apache端口问题 [Access-Control-Allow- Origin标头如何工作?]http://codingdict.com/questions/8006) 他们两个都有代码,但是没有帮助。 到目前为止,我的服务

  • 我对ArrayBlockingQueue进行了一个简单的测试,如下所示: 结果是: 我的问题是,我已经将ArrayBlockingQueue的大小定义为3,而制作人将2、0和1放入队列,总共3个项目,现在队列已满,然后消费者消费了0,队列大小现在应为2,然后制作人将4放入队列,现在队列应已满,为什么制作人仍可以将6放入队列,应该被阻止

  • 因此,当我试图使用React将数据发送到后端时,我遇到了这个错误。据我所知,我需要允许在后端和文件中进行通信。以下是我使用的一些链接: 无“访问控制允许源”-节点/Apache端口问题 访问控制允许起源头是如何工作的? 他们两个都有代码,但都没用。 到目前为止,我的服务器端代码如下: 这是我的客户端代码: 那么我错过了什么?我没有文件,但我都是在本地完成的,所以我不确定是否可以使用它。 在我看来,

  • 我有一个运行API的restify服务器,我将cors中间件定义如下: 但我总是收到这样的错误信息: 跨源请求被阻止:同源策略不允许在https://myRoute...读取远程资源(原因:CORS预飞行通道未成功)。 我做错了什么?