express.json ve bodyParser.json


115

Nispeten yeni bir uygulama yazıyorum ve hangisini kullanmam gerektiğini merak ediyordum:

express.json()

veya

bodyParser.json()

Aynı şeyi yaptıklarını varsayabilir miyim?

express.json()Zaten yerleşik olduğu için kullanmak istiyorum .


express@4.17.1 bağımlılık olarak yalnızca "1.19.0" vücut ayrıştırıcısını kullanıyor
Tagi

Yanıtlar:


260

Express'in önceki sürümlerinde bir çok ara katman yazılımı bulunuyordu. bodyParser ona gelen ara yazılımlardan biriydi. Express 4.0 piyasaya sürüldüğünde, paketlenmiş ara yazılımı Express'ten kaldırmaya ve bunun yerine ayrı paketler yapmaya karar verdiler. Sözdizimi sonra değiştirilen app.use(express.json())için app.use(bodyParser.json())bodyParser modülünü yükledikten sonra.

bodyParser, 4.16.0 sürümünde Express'e geri eklendi, çünkü insanlar daha önce olduğu gibi Express ile birlikte paketlenmesini istiyorlardı. Bu bodyParser.json(), son sürümdeyseniz artık kullanmanız gerekmediği anlamına gelir . Bunun express.json()yerine kullanabilirsiniz .

Sürüm geçmişi 4.16.0 içindir, ilgilenenler için burada ve çekme talebi burada .


3
O app.use(express.urlencoded({ extended: true }));zaman biz de yapabilir miyiz ?
Robin Métral

3
Ah evet, bağlantı kurduğunuz PR'da da bahsediliyor. Harika!
Robin Métral

1
Bu aynı işi yaptıkları anlamına mı geliyor?
GNETO DOMINIQUE

eğer ikisini birden kullanırsam // Veri Ayrıştırma app.use (express.json ()); app.use (express.urlencoded ({extended: false})); iyi mi? çünkü youtube'daki eğitim bana her ikisini de kullanmamı söylüyor
rickvian

1
@rickvian - İsterseniz ikisini de kullanabilirsiniz. json, JSON içindir ve urlencoded, URL kodlamalı veriler içindir. İkisini de eklerseniz, her iki türü de ayrıştırabilirsiniz.
Mika Sundland

15

EVET! Doğru

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;

32
Bu kod parçacığı soruyu çözebilirken, bir açıklama eklemek, yayınınızın kalitesini artırmaya gerçekten yardımcı olur. Gelecekte okuyucular için soruyu yanıtlayacağınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceklerini unutmayın.
Brett DeWoody

8

Evet ikisi de aynı.

node_module / express / lib / express.js dosyasına giderseniz

modül bağımlılıkları altında görebilirsiniz body parser modülü zaten içe aktarılmış

/**
 * Module dependencies.
 */

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

bodyparser modülündeki nesnelere ve yöntemlere, özel nesne modülü kullanılarak dışa aktarıldıklarında erişilebilir.

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

buna ekspres nesneden yalnızca çağrılarak erişilebilir

express.json()

0

Evet!! İnsanların vücut ayrıştırıcıyı ifade ile geri entegre etme konusundaki yaygın görüşleri nedeniyle, en son sürüm tam olarak bunu yapıyor. Her ikisinin de aynı görevleri gerçekleştirdiğini, yani gelen istek nesnesini JSON nesneleri olarak tanımak konusunda haklı olmalısınız. Her ikisini de kullanmaktan çekinmeyin.


0

Evet!! ikisini de kullanabilirsiniz. Ancak, express.json()şimdi zaten içine yerleştirildiğinden express, kullanmak express.json()için bodyParser.json().

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.