express.json vs bodyParser.json


99

Tôi đang viết một ứng dụng tương đối mới và đang tự hỏi mình nên sử dụng ứng dụng nào:

express.json()

hoặc là

bodyParser.json()

Tôi có thể cho rằng họ làm điều tương tự.

Tôi chỉ muốn sử dụng express.json()vì nó đã được tích hợp sẵn.


express@4.17.1 chỉ sử dụng body-parser “1.19.0” làm phần phụ thuộc
Tagi

Câu trả lời:


233

Các phiên bản trước của Express từng có rất nhiều phần mềm trung gian đi kèm với nó. bodyParser là một trong những phần mềm trung gian đến với nó. Khi Express 4.0 được phát hành, họ quyết định loại bỏ phần mềm trung gian đi kèm khỏi Express và thay thế chúng thành các gói riêng biệt. Cú pháp sau đó đã thay đổi từ app.use(express.json())để app.use(bodyParser.json())sau khi cài đặt các module bodyParser.

bodyParser đã được thêm trở lại Express trong bản phát hành 4.16.0, vì mọi người muốn nó được đóng gói với Express như trước đây. Điều đó có nghĩa là bạn không phải sử dụng bodyParser.json()nữa nếu bạn đang sử dụng phiên bản mới nhất. Bạn có thể sử dụng express.json()thay thế.

Lịch sử phát hành cho 4.16.0 là ở đây cho những ai quan tâm và yêu cầu kéo ở đây .


1
Chúng ta cũng có thể làm app.use(express.urlencoded({ extended: true }));sau đó?
Robin Métral

1
À vâng, nó cũng được đề cập trong bài PR bạn đã liên kết. Tuyệt quá!
Robin Métral

1
Có nghĩa là họ làm cùng một công việc?
GNETO DOMINIQUE

điều gì sẽ xảy ra nếu tôi sử dụng cả // Phân tích cú pháp dữ liệu app.use (express.json ()); app.use (express.urlencoded ({extension: false})); Liệu nó có tốt không? vì hướng dẫn trên youtube cho tôi biết sử dụng cả hai
rickvian

1
@rickvian - Bạn có thể sử dụng cả hai nếu bạn muốn. json dành cho JSON và urlencoded dành cho dữ liệu được mã hóa URL. Nếu bạn thêm cả hai, bạn sẽ có thể phân tích cú pháp cả hai loại.
Mika Sundland

14

ĐÚNG! Chính xác

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
Mặc dù đoạn mã này có thể giải quyết câu hỏi, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
Brett DeWoody

8

Có cả hai đều giống nhau.

nếu bạn đi vào tệp node_module / express / lib / express.js

bạn có thể thấy bên dưới phần phụ thuộc mô-đun, mô-đun phân tích cú pháp nội dung đã được nhập

/**
 * Module dependencies.
 */

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

các đối tượng và phương thức bên trong mô-đun bodyparser có thể truy cập được khi chúng được xuất bằng mô-đun đối tượng đặc biệt.

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

điều này có thể truy cập được từ đối tượng express chỉ bằng cách gọi

express.json()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.