使用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 }); });