express.json contre bodyParser.json

100

J'écris une application relativement nouvelle et je me demandais laquelle je devrais utiliser:

express.json()

ou

bodyParser.json()

Puis-je supposer qu'ils font la même chose.

Je voudrais simplement utiliser express.json()car il est déjà intégré.

Soviut
la source
[email protected] utilise juste l'analyseur corporel "1.19.0" comme dépendance
Tagi

Réponses:

234

Les versions antérieures d'Express contenaient de nombreux middlewares. bodyParser a été l'un des middlewares qui est venu. Lors de la sortie d'Express 4.0, ils ont décidé de supprimer le middleware fourni d'Express et d'en faire des packages séparés. La syntaxe a ensuite changé de app.use(express.json())à app.use(bodyParser.json())après l'installation du module bodyParser.

bodyParser a été rajouté à Express dans la version 4.16.0, car les gens voulaient qu'il soit intégré à Express comme avant. Cela signifie que vous n'avez plus à utiliser bodyParser.json()si vous utilisez la dernière version. Vous pouvez utiliser à la express.json()place.

L'historique des versions pour la version 4.16.0 est ici pour ceux qui sont intéressés, et la pull request ici .

Mika Sundland
la source
1
Pouvons-nous aussi faire app.use(express.urlencoded({ extended: true }));alors?
Robin Métral
1
Ah oui, c'est aussi mentionné dans le PR que vous avez lié. Génial!
Robin Métral
1
Est-ce que cela signifie qu'ils font le même travail?
GNETO DOMINIQUE
et si j'utilise à la fois // Data Parsing app.use (express.json ()); app.use (express.urlencoded ({extended: false})); est-ce bien? parce que le tutoriel sur youtube me dit d'utiliser les deux
rickvian
1
@rickvian - Vous pouvez utiliser les deux si vous le souhaitez. json est pour JSON et urlencoded est pour les données encodées par URL. Si vous ajoutez les deux, vous pourrez analyser les deux types.
Mika Sundland
14

OUI! 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;
Oleg Mikhailenko
la source
31
Bien que cet extrait de code puisse résoudre la question, inclure une explication aide vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question aux lecteurs à l'avenir, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.
Brett DeWoody
8

Oui, les deux sont identiques.

si vous allez dans le fichier node_module / express / lib / express.js

vous pouvez voir sous les dépendances du module le module d'analyseur de corps est déjà importé

/**
 * Module dependencies.
 */

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

les objets et méthodes à l'intérieur du module bodyparser sont accessibles car ils sont exportés à l'aide de l'objet spécial module.exports

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

ceci est accessible depuis un objet express simplement en appelant

express.json()
Shersha Fn
la source
0

Oui!! En raison de l'opinion répandue des gens pour intégrer l'analyseur corporel à l'express, la dernière version fait exactement cela. Vous devriez avoir raison de supposer que les deux exécutent les mêmes tâches, c'est-à-dire reconnaître l'objet de demande entrante en tant qu'objets JSON. N'hésitez pas à utiliser l'un ou l'autre.

TanDev
la source