express.json vs bodyParser.json


100

Saya sedang menulis aplikasi yang relatif baru dan bertanya-tanya mana yang harus saya gunakan:

express.json()

atau

bodyParser.json()

Dapatkah saya berasumsi bahwa mereka melakukan hal yang sama.

Saya hanya ingin menggunakan express.json()karena sudah terpasang.


express@4.17.1 hanya menggunakan body-parser "1.19.0" sebagai dependensi
Tagi

Jawaban:


235

Versi Express sebelumnya biasanya memiliki banyak middleware yang disertakan dengannya. bodyParser adalah salah satu middlewares yang membuatnya. Ketika Express 4.0 dirilis, mereka memutuskan untuk menghapus middleware yang dibundel dari Express dan menjadikannya sebagai paket terpisah. Sintaksnya kemudian diubah dari app.use(express.json())menjadi app.use(bodyParser.json())setelah menginstal modul bodyParser.

bodyParser ditambahkan kembali ke Express pada rilis 4.16.0, karena orang menginginkannya dibundel dengan Express seperti sebelumnya. Itu berarti Anda tidak perlu menggunakan bodyParser.json()lagi jika Anda menggunakan rilis terbaru. Anda bisa menggunakan express.json()sebagai gantinya.

Sejarah rilis untuk 4.16.0 ada di sini untuk mereka yang tertarik, dan pull request ada di sini .


1
Bisakah kita juga melakukannya app.use(express.urlencoded({ extended: true }));?
Robin Métral

1
Ah ya, itu juga disebutkan dalam PR yang Anda tautkan. Bagus!
Robin Métral

1
Apakah itu artinya mereka melakukan pekerjaan yang sama?
DOMINIK GNETO

bagaimana jika saya menggunakan kedua // Data Parsing app.use (express.json ()); app.use (express.urlencoded ({extended: false})); apakah itu enak karena tutorial di youtube memberi tahu saya untuk menggunakan keduanya
rickvian

1
@rickvian - Anda dapat menggunakan keduanya jika Anda mau. json untuk JSON dan urlencoded untuk data yang dikodekan URL. Jika Anda menambahkan keduanya, Anda dapat mengurai kedua jenis tersebut.
Mika Sundland

14

IYA! Benar

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
Meskipun cuplikan kode ini dapat menyelesaikan pertanyaan, menyertakan penjelasan sangat membantu meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa mendatang, dan orang-orang itu mungkin tidak tahu alasan saran kode Anda.
Brett DeWoody

8

Ya keduanya sama.

jika Anda masuk ke file node_module / express / lib / express.js

Anda dapat melihat di bawah modul dependensi body parser module sudah diimpor

/**
 * Module dependencies.
 */

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

objek dan metode di dalam modul bodyparser dapat diakses saat diekspor menggunakan modul objek khusus.exports

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

ini dapat diakses dari objek ekspres hanya dengan memanggil

express.json()

0

Iya!! Karena opini luas dari orang-orang untuk mengintegrasikan body-parser kembali dengan express, rilis terbaru melakukan hal ini. Anda seharusnya benar menganggap bahwa keduanya melakukan tugas yang sama, yaitu mengenali objek permintaan yang masuk sebagai objek JSON. Jangan ragu untuk menggunakan keduanya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.