Closed
Description
Hi, I'm trying to create a small development proxy to print out to the console headers, query params, and body.
But I can't get the body and prioxy to work together, and all my research had not given me any obvious solution.
In the code below, when I enable bodyParsers, I get the body printed to the console, but any PUT or POST request that contains a body ends up hanging. With no bodyParsers, req.body is undefined (as pre express docs) and the proxied request completes successfully.
Any advise on how I might approach this?
Thanks in advance.
var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var proxy = require('http-proxy-middleware');
var apiProxy = proxy({
target: 'http://localhost:7040',
changeOrigin: true,
onError: function(err, req, res) {
console.error(err.message);
res.writeHead(500, { 'Content-Type': 'text/plain' });
res.end(err.message);
}
});
// When enabled I get body output, but server/proxy hangs and request never completes.
app.use(bodyParser.raw());
app.use(bodyParser.text());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(function(req, res, next) {
console.log('\n\nHeaders');
console.log(req.headers);
console.log('\nQuery');
console.log(req.query);
console.log('\nBody');
console.log(req.body);
next();
});
app.use(apiProxy);
app.listen(8888);
Activity
chimurai commentedon Jul 5, 2017
mount your
apiProxy
before mounting thebodyParser
middlewares should fix the issue.garyns commentedon Jul 12, 2017
Thanks for the suggestion. I did try this. I get a working proxy, but get 'undefined' for req.body (probably because then bodyParsers are now after my app.use() that dumps the data.)
If I put apiProxy before my app.use(), my app.use() never gets called.
garyns commentedon Jul 12, 2017
Update - I had success using the npm 'body' package rather 'body-parser'.
chnfeeeeeef commentedon Sep 28, 2017
@garyns work for me
anurag87 commentedon Nov 10, 2017
@garyns can you tell the sample how it worked for you. When I am using npm body still my socket is hanging.
algaly commentedon Dec 13, 2017
can you please show an example of how to use body ?
thanks
irfanka commentedon Feb 8, 2018
Hi @chimurai
Would you mind adding the "mount your apiProxy before mounting the bodyParser middlewares" nugget to the README file?
I just spent three days trying to figure out why my proxy was hanging, until I stumbled upon this issue.
Might save someone else the trouble...
Thanks,
danday74 commentedon Mar 21, 2018
jrust commentedon Sep 11, 2018
Found that it is possible to do it with the bodyParser middleware by following this example which shows the need to re-stream the body in the
onProxyReq
method.