191 votes

express.json vs bodyParser.json

Je suis en train d'écrire une application relativement nouvelle et je me demandais laquelle je devais utiliser :

express.json()

o

bodyParser.json()

Je peux supposer qu'ils font la même chose.

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

0 votes

Express@4.17.1 utilise simplement body-parser "1.19.0" comme dépendance.

405voto

MikaS Points 6044

Les versions antérieures d'Express comportaient beaucoup d'intergiciels. bodyParser était l'un de ces intergiciels. Lors de la sortie de la version 4.0 d'Express, il a été décidé de supprimer les intergiciels fournis avec Express et d'en faire des paquets séparés. La syntaxe est alors passée de app.use(express.json()) a app.use(bodyParser.json()) après avoir installé le module bodyParser.

bodyParser a été réintégré à Express dans la version 4.16.0, car les utilisateurs souhaitaient qu'il soit intégré à Express comme auparavant. Cela signifie que vous n'avez pas besoin d'utiliser bodyParser.json() plus si vous êtes sur la dernière version. Vous pouvez utiliser express.json() à la place.

L'historique de la version 4.16.0 est le suivant aquí pour ceux qui sont intéressés, ainsi que la demande de modification (pull request) aquí .

11 votes

Pouvons-nous aussi faire app.use(express.urlencoded({ extended: true })); alors ?

4 votes

Ah oui, c'est également mentionné dans le RP que vous avez mis en lien. Super !

1 votes

Cela signifie-t-il qu'ils font le même travail ?

25voto

Oleg Mikhailenko Points 109

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;

43 votes

Bien que cet extrait de code puisse résoudre la question, y compris une explication contribue vraiment à améliorer la qualité de votre article. N'oubliez pas que vous répondez à la question pour les lecteurs à venir, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.

17voto

Shersha Fn Points 865

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 body parser module 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 en utilisant l'objet spécial module.exports

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

Ceci est accessible depuis l'objet express en appelant simplement

express.json()

10voto

Anil Shrestha Points 41

Oui ! vous pouvez utiliser les deux. Cependant, puisque express.json() est maintenant déjà intégré dans express il est plus sage d'utiliser express.json() que le bodyParser.json() .

0voto

TanDev Points 173

Oui !! En raison de l'opinion répandue des gens de réintégrer body-parser avec 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 les objets de requête entrants comme des objets JSON. N'hésitez pas à utiliser l'un ou l'autre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X