【问题标题】:Node.js proxy with ability to change response headers and inject additional request dataNode.js 代理能够更改响应标头并注入额外的请求数据
【发布时间】:2012-12-07 14:43:30
【问题描述】:

我正在编写一个 node.js 代理服务器,为不同域上的 API 提供请求。

我想使用node-http-proxy,我已经找到a way to modify response headers

但是有没有办法根据条件修改请求数据(即添加 API 密钥)并考虑到可能存在不同的方法请求 - GETPOSTUPDATEDELETE

或者我搞砸了node-http-proxy 的目的,而有什么更适合我的目的?

【问题讨论】:

    标签: api node.js node-http-proxy


    【解决方案1】:

    一种让它变得非常简单的方法是使用中间件。

    var http = require('http'),
        httpProxy = require('http-proxy');
    
    var apiKeyMiddleware = function (apiKey) {
      return function (request, response, next) {
        // Here you check something about the request. Silly example:
        if (request.headers['content-type'] === 'application/x-www-form-urlencoded') {
            // and now you can add things to the headers, querystring, etc.
            request.headers.apiKey = apiKey;
        }
        next();
      };
    };
    
    // use 'abc123' for API key middleware
    // listen on port 8000
    // forward the requests to 192.168.0.12 on port 3000
    httpProxy.createServer(apiKeyMiddleware('abc123'), 3000, '192.168.0.12').listen(8000);
    

    请参阅Node-HTTP-Proxy, Middlewares, and You 了解更多详细信息以及该方法的一些注意事项。

    【讨论】:

    • 史蒂夫,谢谢!它在标题方面是有意义的。是否有任何调整请求数据/正文本身的解决方案,例如添加 API 令牌?
    • @aliona 我认为您可以像上面那样使用 request.body 修改它,但也许您可以告诉我们在您使用的 API 中预计如何接收 API 密钥。通常我会期望它在查询字符串或标题中。
    • API 期望 api 令牌出现在查询字符串或请求正文中,具体取决于请求方法 GETPOSTUPDATEDELETE
    • @aliona 所以你的问题是a)弄清楚如何根据方法在将其放入正文与查询字符串之间进行切换,或者b)如何附加到请求正文?
    • 我的问题主要与 A 有关。我只是想知道 node-http-proxy 是否可以在某些时候帮助我轻松完成它,以便我可以停止“手动”操作。目前我的步骤如下:1)找出请求方法; 2)通过解析查询字符串或收集请求正文来获取请求数据,具体取决于方法; 3)添加所需的标头并根据需要调整请求数据; 4) 对 API 的代理请求
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 2016-05-06
    • 1970-01-01
    • 2017-12-27
    相关资源
    最近更新 更多