为了避免客户端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
添加到网址路径,因此Api/getData
变为https://www.myserver.com/Api/getData
有没有办法剥离相对网址的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
谢谢!
答案 0 :(得分:2)
查看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
});
}
})
答案 1 :(得分:0)
您可以尝试修改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
});
});