I have the following in my node server using express (truncated to the important parts):
var app = express.createServer();
app.all(/test/,function(req,res){
console.log(req.headers);
console.log(req.body);
res.send("");
});
function appStart(cobrands){
app.configure(function(){
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use('/min',express.static('../min'));
app.use('/js',express.static('../js'));
app.use('/css',express.static('../css'));
app.use('/img',express.static('../img'));
});
app.listen(8080);
}
I then have a simple form that calls out to localhost:8080 like so:
<form action="http://localhost:8080/test" method="post">
<input type="hidden" name="test" value="testing"/>
<input type="submit" name="submit" value="to node"/>
</form>
But express.bodyParser doesn't seem to be doing anything, and req.body is undefined. Here's the output of the console.log
s:
// req.headers
{ host: 'localhost:8080',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_1) AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 Safari/534.48.3',
'content-length': '27',
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
origin: 'file://',
'content-type': 'application/x-www-form-urlencoded',
'accept-language': 'en-us',
'accept-encoding': 'gzip, deflate',
cookie: '',
connection: 'keep-alive' }
// req.body
undefined
Note: content-type
is correctly defined as application/x-www-form-urlencoded
as it should be for bodyParser to work, and I've verified that it's coming over by popping open the debug tools in Safari and verifying that the form data is present.
To use the Text body parser, we have to write app. use(bodyParser. text()) and the Content-Type in your fetch API would be text/html . That's it, now your backend service will accept POST request with text in the request body.
“bodyparser is deprecated 2021” Code Answer's // If you are using Express 4.16+ you don't have to import body-parser anymore.
body-parser doesn't have to be installed as a separate package because it is a dependency of express version 4.16. 0+. body-parser isn't a dependency between version 4.0. 0 and 4.16.
Express body-parser is an npm module used to process data sent in an HTTP request body. It provides four express middleware for parsing JSON, Text, URL-encoded, and raw data sets over an HTTP request body.
http://expressjs.com/guide.html#configuration
Note the use of app.router, which can (optionally) be used to mount the application routes, otherwise the first call to app.get(), app.post(), etc will mount the routes.
What's happening is you're calling app.all() before adding any of the other middleware. Doing this effectively puts app.router in front of all of your other middleware, resulting in them never being used on requests that end inside your routes.
Mounting the application routes is pretty much the same as doing app.use(app.router);
.
In the end your stack is looks this:
app.use(app.router); // Contains your /test/ route
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use('/min',express.static('../min'));
app.use('/js',express.static('../js'));
app.use('/css',express.static('../css'));
app.use('/img',express.static('../img'));
tl;dr Move your route between your call to app.configure() and app.listen().
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