node-http-proxy,如何将新的查询参数传递给初始请求?

时间:2019-03-21 16:49:19

标签: javascript node.js express http-proxy node-http-proxy

我正在尝试向代理中的原始请求添加新的查询参数,直接调整req.query就像这样不起作用:

app.all(path, function (req, res) {
    req.query.limit = 2;
    apiProxy.web(req, res, { target: target });
});

目标未接收到limit参数。

是否可以添加新的查询参数,我想以此方式隐藏API密钥。

1 个答案:

答案 0 :(得分:3)

您猜我想的是您正在使用的方法。需要使用proxyReq事件

var httpProxy = require('http-proxy');
const url = require('url');

proxy = httpProxy.createServer({
  target:  'https://httpbin.org',
  secure: false
}).listen(8009);

proxy.on('proxyReq', function(proxyReq, req, res, options) {
  parsed = url.parse(proxyReq.path, true);
  parsed.query['limit'] = 2
  updated_path = url.format({pathname: parsed.pathname, query: parsed.query});
  proxyReq.path = updated_path
  proxyReq.setHeader('X-Special-Proxy-Header', 'foobar');
});

和结果

$ curl "http://localhost:8009/get?x=yz2"
{
  "args": {
    "limit": "2",
    "x": "yz2"
  },
  "headers": {
    "Accept": "*/*",
    "Host": "localhost",
    "User-Agent": "curl/7.54.0",
    "X-Special-Proxy-Header": "foobar"
  },
  "origin": "36.255.84.232, 36.255.84.232",
  "url": "https://localhost/get?x=yz2&limit=2"
}