node.js – bodyParser is deprecated express 4

The Question :

420 people think this question is useful

I am using express 4.0 and I’m aware that body parser has been taken out of the express core, I am using the recommended replacement, however I am getting

body-parser deprecated bodyParser: use individual json/urlencoded middlewares server.js:15:12 body-parser deprecated urlencoded: explicitly specify "extended: true" for extended parsing node_modules/body-parser/index.js:74:29

Where do I find this supposed middlewares? or should I not be getting this error?

var express     = require('express');
var server      = express();
var bodyParser  = require('body-parser');
var mongoose    = require('mongoose');
var passport    = require('./config/passport');
var routes      = require('./routes');

mongoose.connect('mongodb://localhost/myapp', function(err) {
    if(err) throw err;

server.set('view engine', 'jade');
server.set('views', __dirname + '/views');


// Application Level Routes
routes(server, passport);

server.use(express.static(__dirname + '/public'));


The Question Comments :

The Answer 1

764 people think this answer is useful

It means that using the bodyParser() constructor has been deprecated, as of 2014-06-19.

app.use(bodyParser()); //Now deprecated

You now need to call the methods separately



And so on.

If you’re still getting a warning with urlencoded you need to use

  extended: true

The extended config object key now needs to be explicitly passed, since it now has no default value.

If you are using Express >= 4.16.0, body parser has been re-added under the methods express.json() and express.urlencoded().

The Answer 2

159 people think this answer is useful

Want zero warnings? Use it like this:

  extended: true

Explanation: The default value of the extended option has been deprecated, meaning you need to explicitly pass true or false value.

The Answer 3

22 people think this answer is useful

If you’re using express > 4.16, you can use express.json() and express.urlencoded()

The express.json() and express.urlencoded() middleware have been added to provide request body parsing support out-of-the-box. This uses the expressjs/body-parser module module underneath, so apps that are currently requiring the module separately can switch to the built-in parsers.

Source Express 4.16.0 – Release date: 2017-09-28

With this,

const bodyParser  = require('body-parser');

app.use(bodyParser.urlencoded({ extended: true }));


const express = require('express');

app.use(express.urlencoded({ extended: true }));

The Answer 4

15 people think this answer is useful

In older versions of express, we had to use:


because body-parser was a middleware between node and express. Now we have to use it like:

app.use(bodyParser.urlencoded({ extended: false }));

The Answer 5

9 people think this answer is useful

body-parser is a piece of express middleware that reads a form’s input and stores it as a javascript object accessible through req.body ‘body-parser’ must be installed (via npm install --save body-parser) For more info see:

   var bodyParser = require('body-parser');
   app.use(bodyParser.json()); // support json encoded bodies
   app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies

When extended is set to true, then deflated (compressed) bodies will be inflated; when extended is set to false, deflated bodies are rejected.

The Answer 6

2 people think this answer is useful

What is your opinion to use express-generator it will generate skeleton project to start with, without deprecated messages appeared in your log

run this command

npm install express-generator -g

Now, create new Express.js starter application by type this command in your Node projects folder.

express node-express-app

That command tell express to generate new Node.js application with the name node-express-app.

then Go to the newly created project directory, install npm packages and start the app using the command

cd node-express-app && npm install && npm start

The Answer 7

1 people think this answer is useful

I found that while adding

  extended: true

helps, sometimes it’s a matter of your querying that determines how express handles it.

For instance, it could be that your parameters are passed in the URL rather than in the body

In such a case, you need to capture both the body and url parameters and use whichever is available (with preference for the body parameters in the case below)

        let pars = (Object.keys(req.body).length > 0)?req.body:req.query;

The Answer 8

-1 people think this answer is useful

app.use(bodyParser.urlencoded({extended: true}));

I have the same problem but this work for me. You can try this extended part.

Add a Comment