Express.json vs bodyParser.json

Я пишу относительно новое приложение и задаюсь вопросом, что я должен использовать:

express.json()

или

bodyParser.json()

Могу ли я предположить, что они делают то же самое.

Я хотел бы просто использовать express.json(), поскольку он уже встроен.

Ответ 1

В более ранних версиях Express использовалось много промежуточного программного обеспечения в комплекте с ним. bodyParser был одним из посредников, которые пришли. Когда Express 4.0 был выпущен, они решили удалить связанное промежуточное ПО из Express и вместо этого сделать их отдельными пакетами. Затем синтаксис изменился с app.use(express.json()) на app.use(bodyParser.json()) после установки модуля bodyParser.

bodyParser был добавлен обратно в Express в версии 4.16.0, потому что люди хотели, чтобы он был связан с Express как раньше. Это означает, что вам больше не нужно использовать bodyParser.json(), если вы находитесь в последней версии. Вместо этого вы можете использовать express.json().

История релизов для 4.16.0 здесь для тех, кто интересуется, и запрос на растяжение здесь.

Ответ 2

ДА! Правильно

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;

Ответ 3

Да, оба одинаковы.

если вы идете в файл node_module/express/lib/express.js

вы можете увидеть под модулем зависимостей тела модуля уже импортирован модуль

/**
 * Module dependencies.
 */

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

объекты и методы внутри модуля bodyparser доступны, так как они экспортируются с использованием специального объекта module.exports

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

это доступно из экспресс-объекта, просто вызвав

express.json()