Node.js 使用http代理中间件转发仅更改端口的Express请求

Node.js 使用http代理中间件转发仅更改端口的Express请求,node.js,express,http-proxy-middleware,Node.js,Express,Http Proxy Middleware,这是一个NodeJS,Express应用程序 我想接受一个进入路径的请求,如 -> . 我希望将所有头文件、请求正文等传递给此转发主机。基本上我唯一要做的就是改变端口 我查看了http代理中间件,但不确定如何实现这一点。我不确定路由器选项的作用。此外,如果有任何查询字符串,我不确定它们是否会被传递。这个服务的问题是,我似乎无法接受传入的请求并生成代理。或者至少,我不知道怎么做。如果可以,我会根据传入的请求将代理构建为处理程序 不是寻找完整的代码片段,只是寻找哪一部分的线索。或者,如果您确实有一个

这是一个NodeJS,Express应用程序

我想接受一个进入路径的请求,如 -> . 我希望将所有头文件、请求正文等传递给此转发主机。基本上我唯一要做的就是改变端口

我查看了http代理中间件,但不确定如何实现这一点。我不确定路由器选项的作用。此外,如果有任何查询字符串,我不确定它们是否会被传递。这个服务的问题是,我似乎无法接受传入的请求并生成代理。或者至少,我不知道怎么做。如果可以,我会根据传入的请求将代理构建为处理程序


不是寻找完整的代码片段,只是寻找哪一部分的线索。或者,如果您确实有一个示例,我想看看。

正如您所怀疑的那样,使用
路由器可以控制如何/在何处代理请求。请注意,在这种情况下不需要
目标
,但您仍然需要指定它,因为lib将抛出一个错误(请参见此处讨论的内容)

因此,例如,如果您希望根据请求路径控制代理到何处,可以执行以下操作:

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

我喜欢这种简单性,但我不能确定主机名或查询字符串是什么。这可以部署在具有不同主机名的测试系统上。如果您想代理所有请求,而不考虑实际路由,则只需删除
/cost recovery
上下文:
app.use(proxyMiddleware)还可以指定路由器以控制代理的位置。请检查我的编辑:)我不想代理所有请求,那些我代理的请求将转到不同的端口(它们实际上到达不同的容器).以上代码仅将路径为
/成本回收
的请求代理到
某个域.com:1234
,并将路径为
/其他路径
的请求代理到
某个域.com:5678
。这不是您需要的吗?