socket.io 的快速代理

Express proxy for socket.io

运行 微服务架构,我想通过我的网关将所有 socket.io 流量转发到 socket.io 微服务。我的网关是 运行 快递。我当前的实现如下所示:

import proxy from 'http-proxy-middleware';
import express from 'express';
import cors from 'cors';

const app = express();

app.use(cors())

// proxy middleware options
const options = {
    target: 'http://127.0.0.1:1234/test',
    changeOrigin: true,
    secure: false,
    ws: true
};

const exampleProxy = proxy(options);

app.use('/socket.io', exampleProxy);
app.use('/upgrade', exampleProxy);

app.listen(port);

奇怪的是 GET 请求通过我的服务,所以我得到了套接字连接,但是当试图从 socket.io 客户端(POST 请求)发出事件时,请求超时。

在这种情况下,我的快递服务器通过摩根记录以下内容:

 [HPM] Error occurred while trying to proxy request /socket.io/?EIO=3&transport=polling&t=MrZfNeU&sid=cR-5g0531PU9XxiGAAAN from localhost:2999 to http://127.0.0.1:1234/test (ECONNRESET) (https://nodejs.org/api/errors.html#errors_common_system_errors)

我的前端显示cors错误:

Access to XMLHttpRequest at 'http://localhost:8888/socket.io/?EIO=3&transport=polling&t=MrZfNeU&sid=cR-5g0531PU9XxiGAAAN' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

当直接连接到 socket.io 服务器时,它工作得很好。可能是什么问题?谢谢!

显然您收到了 CORS 错误。 (CORS 是跨源资源共享)

能激活cors中间件吗?在快递方面。

来源:https://expressjs.com/en/resources/middleware/cors.html

问题已通过将 bodyParser 放置在代理下方解决,如下面 comment 所述。