user7742676
user7742676

Reputation:

express.json vs bodyParser.json

I'm writing a relatively new app and was wondering which I should use:

express.json()

or

bodyParser.json()

Can I assume they do the same thing.

I would like to just use express.json() as it is built in already.

Upvotes: 203

Views: 126606

Answers (5)

Mika Sundland
Mika Sundland

Reputation: 18969

Earlier versions of Express used to have a lot of middleware bundled with it. bodyParser was one of the middleware that came with it. When Express 4.0 was released they decided to remove the bundled middleware from Express and make them separate packages instead. The syntax then changed from app.use(express.json()) to app.use(bodyParser.json()) after installing the bodyParser module.

bodyParser was added back to Express in release 4.16.0, because people wanted it bundled with Express like before. That means you don't have to use bodyParser.json() anymore if you are on the latest release. You can use express.json() instead.

The release history for 4.16.0 is here for those who are interested, and the pull request is here.

Upvotes: 433

Anil Shrestha
Anil Shrestha

Reputation: 131

Yes!! you can use both of them. However, since express.json() is now already built into express, it is wiser to use express.json() than the bodyParser.json().

Upvotes: 10

TanDev
TanDev

Reputation: 437

Yes!! Due to the widespread opinion of the people to integrate body-parser back with the express, the latest release does exactly this. You should be right to assume that both perform the same tasks, that is to recognize incoming request object as JSON objects. Feel free to use either.

Upvotes: 0

Oleg Mikhailenko
Oleg Mikhailenko

Reputation: 283

YES! Correct

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

Upvotes: 26

Shersha Fn
Shersha Fn

Reputation: 1571

Yes both are same .

if you go into the file node_module/express/lib/express.js

you can see under module dependencies body parser module is already imported

/**
 * Module dependencies.
 */

var bodyParser = require('body-parser')
//other modules

the objects and methods inside bodyparser module are accessible as they are exported using the special object module.exports

exports = module.exports = createApplication;
exports.json = bodyParser.json

this is accessible from express object just by calling

express.json()

Upvotes: 20

Related Questions