当前位置: 首页 > 知识库问答 >
问题:

Web包配置代理请求正文日志记录

季凡
2023-03-14

Webpack开发服务器代理配置留档:

https://webpack.js.org/configuration/dev-server/#devserver-代理

表示它使用http代理中间件:

https://github.com/chimurai/http-proxy-middleware#http-代理事件

使用上述链接中记录的onProxyRes功能,我可以执行以下操作:

function onProxyRes(proxyRes, req, res) {
    proxyRes.headers['x-added'] = 'foobar';     // add new header to response
    delete proxyRes.headers['x-removed'];       // remove header from response
    console.log(req.headers)                    // log headers
    console.log(req.body)                  // undefined
    console.log(proxyReq.body)             // undefined
}

我的问题是,尽管其他一切都很好——我无法记录请求主体——它返回定义

有人知道如何为了调试目的读取请求主体吗?我是否需要使用npmbody-parser模块?如果有,如何?thx


共有2个答案

穆彬郁
2023-03-14

我尝试用快速体解析器模块记录请求,但它导致请求挂起。使用正文模块对请求正文进行日志修复。

const anyBody = require('body/any')
onProxyReq(proxyReq, req, res) {
    anyBody(req, res, function (err, body) {
        if (err) console.error(err)
        console.log(body)
    })
})

请注意,我在express中也使用了相同的方法,如下所示:

app.use((req, res, next) => {
    anyBody(req, res, function (err, body) {
        if (err) console.error(err)
        console.log(body)
    })
    next()
})
宰父淳
2023-03-14

我用body-parser解决了一个类似的问题。

在发送到服务器之前,我试图修改请求正文,这导致请求挂起,可能是因为更改正文时,请求的Content-L长度不再匹配(导致其被截断)。

解决方案是在编写新请求正文之前“调整”内容长度:

var bodyParser = require('body-parser');   

devServer: {
    before: function (app, server) {
        app.use(bodyParser.json());
    },
    onProxyReq: function (proxyReq, req, res) {
        req.body = {
            ...req.body,
            myProperty: "myPropertyValue"
        };

        const body = JSON.stringify(req.body);

        proxyReq.setHeader('Content-Length', Buffer.byteLength(body));

        proxyReq.write(body);
    }
}

不确定,但在您的情况下,可能是请求被添加/删除标头截断,导致其挂起。

 类似资料:
  • 我正在通过后码头日志记录,并试图找出打印的每个属性的含义 123.4.5.6---[27/Aug/2004:10:16:17 0000]“GET/jetty/tut/XmlConfiguration.html HTTP/1.1”200 76793”http://localhost:8080/jetty/tut/logging.html“Mozilla/5.0(X11;U;Linux i686;en

  • 我有一个Spring Rest控制器,可以满足以下要求: 我想在日志中将我的12223334455号替换为1******4455号,我已经为其制定了一个方法: 但这个请求并不是在句柄中,而是在控制器内部的某个地方。使用该方法屏蔽我的号码的最佳方法是什么?

  • 问题内容: 我还找不到关于如何使用Log4j的XML样式配置文件配置Hibernate日志记录的任何文档。 这是否有可能,或者我是否使用属性样式配置文件来控制Hibernate的日志记录? 如果有人有任何信息或文档链接,我们将不胜感激。 编辑: 只是为了澄清,我正在寻找控制Hibernate的实际XML语法的示例。 EDIT2: 这是我的XML配置文件中的内容。 日志记录工作正常,但是我正在寻找一

  • 我试图通过aop在控制器中记录超文本传输协议请求。但是,在方面代码中,如果我 那么请求数据将无法在主流中检索。 所以,我创建了另一个公共方法,在控制器中传递请求字符串 这种方法是记录“数据”的切入点。 但问题是,这种方法的切入点似乎无法通过Spring识别,这种方法没有日志记录。我需要帮助。 下面是aop的定义

  • 每当我部署一个外部化配置有错误的生产应用程序时,我都会在Tomcat日志中收到以下消息: 显然,外部化的配置是在log4j被正确初始化之前处理的,因此没有附加程序可以接受来自的消息。 有没有办法预先初始化log4j,以便在标准Grails log4j初始化发生之前捕获这些消息?

  • 问题内容: 如何配置OpenEJB日志记录格式?这就是我现在在日志中看到的内容: 我想禁用消息,并更改其他消息的格式。中的更改无效。 问题答案: 这是我为使事情正常运行所做的工作: 现在工作正常。这是我的: 这是: 现在,由于大卫的支持,我可以在测试期间微调OpenEJB的日志记录:)