【问题标题】:Use http-proxy-middleware to forward Express request changing only port使用 http-proxy-middleware 转发 Express 请求,仅更改端口
【发布时间】:2021-03-31 22:58:14
【问题描述】:

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

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

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

不是在寻找完整的编码 sn-p,只是关于要查找的部分的线索。或者如果你有一个例子,我想看看。

【问题讨论】:

    标签: node.js express http-proxy-middleware


    【解决方案1】:

    正如您所怀疑的那样,使用 router 可以控制将请求代理到的方式/位置。请注意,在这种情况下不需要 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
    

    【讨论】:

    • 我喜欢简单,但我不能确定主机名或查询字符串是什么。这可以部署在具有不同主机名的测试系统上。
    • 如果你想代理所有请求而不考虑实际路由,你可以删除/cost-recovery上下文:app.use(proxyMiddleware);你也可以指定路由器来控制代理到哪里。请检查我的编辑:)
    • 我不想代理所有请求,我代理的请求会转到不同的端口(它们实际上到达不同的 Angular 容器)。
    • 以上代码代理仅请求路径为/cost-recoverysome-domain.com:1234 和路径为/some-other-pathsome-domain.com:5678 的请求。这不是你需要的吗?
    猜你喜欢
    • 2019-05-23
    • 2017-03-05
    • 2018-10-22
    • 2022-12-17
    • 1970-01-01
    • 2020-12-13
    • 2013-04-29
    • 2015-11-01
    • 1970-01-01
    相关资源
    最近更新 更多