使用 http-proxy-middleware 转发 Express 请求仅更改端口

Use http-proxy-middleware to forward Express request changing only port

这适用于 NodeJS、Express 应用程序。

我想接受一个进入类似路径的请求 https://mycompany.com/cost-recovery -> http://mycompany.com:8447/cost-recovery。我希望将所有 headers、请求主体等传递给这个转发的主机。本质上,我唯一要做的就是更改端口。

我查看了 http-proxy-middleware,但不确定如何解决这个问题。我不确定路由器选项的作用。此外,如果有任何查询字符串,我不确定它们是否会通过。该服务的问题在于,我似乎无法接收传入请求并生成代理。或者至少,我不知道怎么做。如果可以的话,我会根据传入的请求将代理构建为处理程序。

不是在寻找完整的代码片段,只是关于要寻找哪个部分的线索。或者如果你有例子,我想看看。

正如您所怀疑的那样,使用 router 允许您控制 how/where 将请求代理到。请注意,在这种情况下不需要 target,但无论如何您都需要指定它,否则 lib 将抛出错误(请参阅 github-issue 讨论)。

因此,例如,如果您想根据请求路径控制代理到哪里,您可以执行以下操作:

const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');

const proxyMiddleware = createProxyMiddleware({
target: 'not-needed',
router: (req) => {
    if (req.path === '/cost-recovery') {
        return 'http://some-domain:1234';
    } else if (req.path === '/some-other-path') {
        return 'http://some-domain.com:5678';
    }
  }
});

const app = express();

app.use(proxyMiddleware);

app.listen(3000); // set whatever port your proxy-app should run on here