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

ran*_*y04 3 javascript http-proxy node.js express node-http-proxy

我试图将新的查询参数添加到我的node-http-proxy中的原始请求中,像这样直接调整req.query是行不通的:

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

limit目标未收到

我想通过这种方式隐藏 API 密钥,是否可以添加新的查询参数?

Tar*_*ani 5

我猜您使用的方法是在响应之后。需要使用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');
});
Run Code Online (Sandbox Code Playgroud)

和结果

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');
});
Run Code Online (Sandbox Code Playgroud)