使用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
});
}
})
为了避免客户端 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
});
}
})