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

标签 javascript node.js express http-proxy node-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 key ,是否可以添加新的查询参数?

最佳答案

我猜你使用的方法是在响应之后。需要使用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"
}

关于javascript - node-http-proxy,如何将新的查询参数传递给初始请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55285448/

相关文章:

javascript - ko.mapping(更新数组问题)

php - codeigniter 中的一次 HTTPS ajax 调用

node.js - 如何在 Node js 中模拟 AWS QLDB

javascript - 如何在 mongoose/mongodb 中对子文档数组进行排序?

javascript - 如何在vue js中更改css背景?

javascript - 当我在菜单外单击时如何隐藏多个 jQuery toggle()?

node.js - 更新数组中的多个元素

javascript - 在 JavaScript 中完成的函数

javascript - 点击 strip 结帐流程后,Req.params 和 req.user 丢失

javascript - Express 和 SSL 使用