How to force parse request body as plain text instead of json in Express? How to force parse request body as plain text instead of json in Express? json json

How to force parse request body as plain text instead of json in Express?


In express 4.x you can use the text parser from bodyParserhttps://www.npmjs.org/package/body-parser

just add in app.js

app.use(bodyParser.text());

Also in the desired route

router.all('/',function(req,res){    console.log(req.body);})


By default bodyParser.text() handles only text/plain. Change the type options to include */json or */*.

app.use('/some/route', bodyParser.text({type: '*/*'}), function(req, res) {  var text = req.body; // I expect text to be a string but it is a JSON});//or more generally:app.use(bodyParser.text({type:"*/*"}));

You can find the docs here


If you remove the use of the bodyParser() middleware, it should be text. You can view the bodyParser docs for more info: http://www.senchalabs.org/connect/middleware-bodyParser.html

Remove this line:

app.use(express.bodyParser());

EDIT:

Looks like you're right. You can create your own rawBody middleware in the meantime. However, you still need to disable the bodyParser(). Note: req.body will still be undefined.

Here is a demo:

app.js

var express = require('express')  , http = require('http')  , path = require('path')  , util = require('util');var app = express();function rawBody(req, res, next) {  req.setEncoding('utf8');  req.rawBody = '';  req.on('data', function(chunk) {    req.rawBody += chunk;  });  req.on('end', function(){    next();  });}app.configure(function(){  app.set('port', process.env.PORT || 3000);  app.use(rawBody);  //app.use(express.bodyParser());  app.use(express.methodOverride());  app.use(app.router);});app.post('/test', function(req, res) {  console.log(req.is('text/*'));  console.log(req.is('json'));  console.log('RB: ' + req.rawBody);  console.log('B: ' + JSON.stringify(req.body));  res.send('got it');});http.createServer(app).listen(app.get('port'), function(){  console.log("Express server listening on port " + app.get('port'));});

test.js

var request = require('request');request({  method: 'POST',  uri: 'http://localhost:3000/test',  body: {'msg': 'secret'},  json: true}, function (error, response, body) {  console.log('code: '+ response.statusCode);  console.log(body);})

Hope this helps.