Enc*_*tar 4 proxy http-proxy node.js node-http-proxy
如何使用nodejs中的查询字符串参数代理请求,我目前正在使用express和http-proxy?
我有一个使用express和http-proxy模块的nodejs应用程序将HTTP GET请求从我的端点上的某些路径代理到在同一服务器上运行的第三方API但是有一个不同的端口(因此遇到了相同的原始问题,需要代理).这工作正常,直到我想在后端API上使用查询字符串参数调用REST函数,即"?name = value".然后我得到一个404.
var express = require('express');
var app = express();
var proxy = require('http-proxy');
var apiProxy = proxy.createProxyServer();
app.use("/backend", function(req,res){
apiProxy.web(req,res, {target: 'http://'+ myip + ':' + backendPort + '/RestApi?' + name + '=' + value});
});
Run Code Online (Sandbox Code Playgroud)
Chrome的控制台显示:
"GET http://localhost:8080/backend 404 (Not Found)"
Run Code Online (Sandbox Code Playgroud)
注意:我稍后在快递中使用其他东西,但不是在代理行之前使用,而是在路由路径时从更具体到更通用.可以使用相同的协议在浏览器中直接访问后端:// url:port/path?name = value没有问题.
我通过更改req.url包含查询字符串params并仅将主机名传递给apiProxy.web target参数来实现此功能:
app.use('/*', function(req, res) {
var proxiedUrl = req.baseUrl;
var url = require('url');
var url_parts = url.parse(req.url, true);
if (url_parts.search !== null) {
proxiedUrl += url_parts.search;
}
req.url = proxiedUrl;
apiProxy.web(req, res, {
target: app.host
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4217 次 |
| 最近记录: |