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.
The http-proxy-middleware module does not return a promise, instead it returns an express middleware. You can use a custom filter to decide whether or not to proxy the request. You need to add the pathRewrite options in order to rewrite the url according to the current hostname.
Express middleware to proxy request to another host and pass response back to original caller.
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 love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With