11
votes

I'm using http-proxy-middleware to implement a transparent proxy.

I'd like to do request/response inspection. I mean, I'd like to print in a text file request/responses that go through the proxy whithout do any modifying on them.

Up to now, what I'm using is something like that (simplified version):

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() is a helper function that uses a string as input and prints it is my log file)

Thus, basically I'm using onProxyRes to intercept the response and do logging at that point. The problem is that I have been only able to make it work for things like URL, status code, headers, etc. but I haven't find the payload body in req and/or resProxy objects.

I have read about how to get the res body here. However, it seems to be complex solution (needs to set a data event handler). And it doesn't cover the req body, as far as I understand.

Any hint/help/reference is hightly appreciated, please. Not sure if even using onProxyRes is the best way of implementing this, maybe the library provides some functionality to cover the request/response case.

2

2 Answers

1
votes

If you use latest express version, this will work.

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

If you want the req.body, you have to use a library to get it (or build it out of the stream yourself). I recommend body-parser