1

在这里看到的 Webpack 开发服务器代理配置文档:

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

说它使用http-proxy-middleware:

https://github.com/chimurai/http-proxy-middleware#http-proxy-events

使用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
}

我的问题,虽然其他一切都很好 - 我无法记录请求正文 - 它返回undefined

任何人都知道如何阅读请求正文以进行调试?我是否需要使用 npmbody-parser模块?如果是这样,怎么做?谢谢

4

2 回答 2

4

我使用body-parser.

我试图在将请求正文发送到服务器之前对其进行修改,这可能导致请求挂起,因为更改正文,Content-Length请求的不再匹配(导致它被截断)。

Content-Length解决方案是在编写新请求正文之前“调整大小” :

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);
    }
}

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

于 2019-10-23T10:12:30.277 回答
2

我尝试使用 express body-parser模块记录请求,但它导致请求挂起。使用body模块记录请求正文已修复它。

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()
})
于 2018-03-21T07:40:43.620 回答