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