3

I am trying to add new query params to the original request in my node-http-proxy, tweaking the req.query directly like this doesn't work:

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

The limit param is not received by the target.

I'd like to hide an API key this way, Is it possible to add new query params?

Carlos Valencia
  • 6,499
  • 2
  • 29
  • 44

1 Answers1

5

The method your are using is for after the response I guess. The need to use the proxyReq event

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');
});

and the results

$ 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"
}
Tarun Lalwani
  • 142,312
  • 9
  • 204
  • 265