Log Request/Responses Bodies with Http-Proxy-Middleware
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...
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 Answers
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);
}
}));
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