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é.


express@4.17.1 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 .


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;

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()

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.