express.json против bodyParser.json


111

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

express.json()

или

bodyParser.json()

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

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


express@4.17.1 просто использует body-parser «1.19.0» в качестве зависимости
Таги

Ответы:


254

В более ранних версиях 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 находится здесь для тех, кому интересно, а запрос на вытягивание здесь .


3
Можем ли мы тогда тоже сделать app.use(express.urlencoded({ extended: true }));?
Робин Метраль

3
Ах да, это также упоминается в связанном вами PR. Большой!
Робин Метраль

1
Значит ли это, что они делают одну и ту же работу?
GNETO DOMINIQUE

что, если я использую оба // Анализ данных app.use (express.json ()); app.use (express.urlencoded ({extended: false})); это хорошо? потому что учебник на YouTube говорит мне использовать оба
Риквиан

1
@rickvian - Вы можете использовать оба, если хотите. json предназначен для JSON, а urlencoded - для данных в кодировке URL. Если вы добавите оба, вы сможете анализировать оба типа.
Мика Сандленд

15

ДА! Верный

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;

31
Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода.
Brett DeWoody

8

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

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

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

/**
 * Module dependencies.
 */

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

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

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

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

express.json()

0

Да!! Из-за широко распространенного мнения людей об обратной интеграции body-parser с экспрессом, последняя версия делает именно это. Вы должны быть правы, предполагая, что оба выполняют одни и те же задачи, то есть распознают объект входящего запроса как объекты JSON. Не стесняйтесь использовать любой.


0

Да!! вы можете использовать их оба. Однако, поскольку express.json()он уже встроен express, его разумнее использовать, express.json()чем расширение bodyParser.json().

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.