Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get rawBody in express

Hello I am trying to retrieve something from the post, and need the rawBody property from the incoming request. How can I retrieve it??

I tried using express.bodyParser() and in my post handler, I was looking for req.rawBody, and it was undefined.

I even tried it with connect.bodyParser(), but I still have no luck with it. I am getting undefined for rawBody.

I was reading on the stackoverflow site saying that they had removed the rawBody functionality, but mentioned that it is a quick fix to add it to our own middleware file. I am a newbie, so I do not have a clue as to how to achieve this. Below is my code snippet.

/**
 * Module dependencies.
 */

var express = require('express')
  , connect = require('connect')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
//app.use(express.bodyParser());
app.use(connect.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);



/**custom stuff**/

app.post('/upload',function(req, res){
        console.log(req.header('Content-Type'));
        console.log(req.header('Host'));
        console.log(req.header('User-Agent'));

        console.log(req.rawBody);
        console.log(req.body);
        res.send("<h1> Hello the response is "+req.body.username);
});

/** end**/

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});

Any help with this is much appreciated.

Thank you.

like image 684
macha Avatar asked Jul 14 '13 23:07

macha


People also ask

How do I get a raw body from Express?

To get raw request body in our Express app, we can add the raw body parsing function and set that as the value of the verify option of the middleware. We have the rawBodySaver function that gets the buf parameter, which has the raw request body buffer.

What does Express raw () do?

raw() is a built-in middleware function in Express. It parses the incoming requests into a buffer and it is based upon the body-parser. This method returns the middleware that parses all JSON bodies as buffer and only looks at the requests where the content-type header matches the type option.


1 Answers

You can use your own middle ware to do this:

app.use(function(req, res, next){
   var data = "";
   req.on('data', function(chunk){ data += chunk})
   req.on('end', function(){
      req.rawBody = data;
      next();
   })
})

// Your route registration:
app.get('/', function(){// whatever...})

app.post('/test', function(req, res){
    console.log(req.rawBody);
    res.send("your request raw body is:"+req.rawBody);
})
like image 65
Rikky Avatar answered Oct 18 '22 06:10

Rikky