【问题标题】:Log request/responses bodies with http-proxy-middleware使用 http-proxy-middleware 记录请求/响应主体
【发布时间】:2018-10-22 00:25:24
【问题描述】:

我正在使用http-proxy-middleware 来实现透明代理。

我想做请求/响应检查。我的意思是,我想打印通过代理的文本文件请求/响应,而不对它们进行任何修改。

到目前为止,我使用的是类似的东西(简化版):

app.use('/proxy/:service/', proxy({
        pathRewrite: function(path, req){
            ...
        },
        router: function(req) {
            ...
        },
        onProxyRes: function(proxyRes, req, res) {
            log("Req URL: " + req.originalUrl);
            log("Response status code: " + proxyRes.statusCode);
        }
}));

log() 是一个辅助函数,它使用字符串作为输入并打印它是我的日志文件)

因此,基本上我使用onProxyRes 来拦截响应并在那时进行日志记录。问题是我只能使其适用于 URL、状态代码、标头等内容,但我没有在 req 和/或 resProxy 对象中找到有效负载主体。

我已阅读有关如何获取 res 正文 here 的信息。但是,这似乎是一个复杂的解决方案(需要设置一个data 事件处理程序)。据我了解,它不包括req 正文。

任何提示/帮助/参考都非常感谢,请。不确定即使使用onProxyRes 是否是实现这一点的最佳方式,也许该库提供了一些功能来涵盖请求/响应情况。

【问题讨论】:

    标签: node.js http-proxy-middleware


    【解决方案1】:

    如果您使用最新的 express 版本,这将起作用。

    app.use(express.json())
    app.use('/proxy/:service/', proxy({
            onProxyRes: function(proxyRes, req, res) {
                log("Req URL: " + req.originalUrl);
                log("Response status code: " + proxyRes.statusCode);
            }
    }));
    

    【讨论】:

      【解决方案2】:

      如果你想要req.body,你必须使用一个库来获取它(或者你自己从流中构建它)。我推荐body-parser

      【讨论】:

      • 感谢您的反馈!我已经查看了 body-parser 的链接,但是在 onProxyRes 中使用它的方式对我来说并不简单……请问您有任何示例代码或链接吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-31
      • 2017-08-21
      • 2018-07-26
      • 2016-11-21
      • 1970-01-01
      相关资源
      最近更新 更多