使用Express代理,如何更改相对的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开头的调用redirect到我的服务器。

但是,这也将Api附加到URLpath,所以Api/getData变成https://www.myserver.com/Api/getData

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

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

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

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

这当然适用于所有请求types,不仅适用于GET

谢谢!

看一下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 }); } }) 

你可以尝试修改req.url选项。 就像是:

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