express.json vs bodyParser.json

98

Ich schreibe eine relativ neue App und habe mich gefragt, welche ich verwenden soll:

express.json()

oder

bodyParser.json()

Kann ich davon ausgehen, dass sie dasselbe tun?

Ich möchte nur verwenden, express.json()wie es bereits eingebaut ist.

Soviut
quelle
[email protected] verwendet nur den Body-Parser "1.19.0" als Abhängigkeit
Tagi

Antworten:

232

In früheren Express-Versionen war früher viel Middleware enthalten. bodyParser war einer der Middlewares, die es kamen. Als Express 4.0 veröffentlicht wurde, beschlossen sie, die mitgelieferte Middleware aus Express zu entfernen und stattdessen separate Pakete zu erstellen. Die Syntax wurde nach der Installation des bodyParser-Moduls von app.use(express.json())auf app.use(bodyParser.json())geändert.

bodyParser wurde in Version 4.16.0 wieder zu Express hinzugefügt, da die Benutzer wollten, dass es wie zuvor mit Express gebündelt wird. Das bedeutet, dass Sie nicht bodyParser.json()mehr verwenden müssen, wenn Sie sich in der neuesten Version befinden. Sie können express.json()stattdessen verwenden.

Der Release-Verlauf für 4.16.0 ist hier für Interessierte und die Pull-Anfrage hier .

Mika Sundland
quelle
1
Können wir das app.use(express.urlencoded({ extended: true }));dann auch tun ?
Robin Métral
1
Ah ja, es wird auch in der PR erwähnt, die Sie verlinkt haben. Toll!
Robin Métral
1
Bedeutet das, dass sie den gleichen Job machen?
GNETO DOMINIQUE
Was ist, wenn ich beide verwende? // Data Parsing app.use (express.json ()); app.use (express.urlencoded ({erweitert: false})); ist es gut? weil das Tutorial in youtube mir sagt, dass ich beide verwenden soll
Rickvian
1
@rickvian - Sie können beide verwenden, wenn Sie möchten. json ist für JSON und urlencoded ist für URL-codierte Daten. Wenn Sie beide hinzufügen, können Sie beide Typen analysieren.
Mika Sundland
13

JA! Richtig

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
quelle
31
Während dieses Code-Snippet die Frage lösen kann, hilft das Hinzufügen einer Erklärung wirklich, die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in Zukunft beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen.
Brett DeWoody
7

Ja, beide sind gleich.

Wenn Sie in die Datei node_module / express / lib / express.js gehen

Sie können unter Modulabhängigkeiten sehen, dass das Body-Parser-Modul bereits importiert ist

/**
 * Module dependencies.
 */

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

Auf die Objekte und Methoden im bodyparser-Modul kann zugegriffen werden, wenn sie mit dem speziellen Objekt module.exports exportiert werden

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

Dies ist vom Express-Objekt aus nur durch Aufrufen zugänglich

express.json()
Shersha Fn
quelle