使用Express代理,如何更改相对url?

Using Express proxy, how to change the relative url?

为了避免客户端 javascript 代码的典型 CORS 问题,我使用了 nodejs express 服务器。此服务器包含以下代码:

var app = express();

  app.all('/Api/*', function (req, res) {
    proxy.web(req, res, {
        target: 'https://www.myserver.com',
        changeOrigin:true
    });
  });

所以它所做的是将任何以 /Api 开头的调用重定向到我的服务器。

但是,这也会将 Api 附加到 url 路径,因此 Api/getData 变为 https://www.myserver.com/Api/getData

有没有办法去除相对 url 的 Api 部分?最终结果将是 Api/getData 变成 https://www.myserver.com/getData

这将允许我通过更改相对 url 路径的第一部分来定位多个服务器。像这样:

Api/getData -> https://www.myserver.com/getData

OtherApi/getData/for/some/path -> https://www.some-other-server.com/getData/for/some/path

这当然适用于所有请求类型,而不仅仅是 GET

谢谢!

您可以尝试修改req.url选项。类似于:

app.all('/Api/*', function (req, res) {        
    req.url = req.url.split('/Api/')[1];
    proxy.web(req, res, {
        target: 'http://whosebug.com/',
        changeOrigin:true
    });
});

看看 http-proxy-rules 模块,它是 node-http-proxy 的配套模块。它允许您编写将匹配路由更改为不同代理路由的规则。

有了它,您应该能够像这样定义您的翻译:

var proxyRules = new HttpProxyRules({
    rules: {
      '.*/Api': 'http://myserver.com/', // Rule (1)
      '.*/OtherApi*': 'http://some-other-server.com:8080/' // Rule (2)
    },
    default: 'http://myserver.com/' // default target
  });

然后像这样使用它们:

app.all('*', function(req, res) {
  var target = proxyRules.match(req);
  if (target) {
    return proxy.web(req, res, {
      target: target
    });
  }
})