bodyParser ekspres 4 kullanımdan kaldırıldı


398

Ekspres 4.0 kullanıyorum ve vücut ayrıştırıcısının ekspres çekirdekten çıkarıldığının farkındayım, önerilen değiştirmeyi kullanıyorum, ancak alıyorum

body-parser deprecated bodyParser: use individual json/urlencoded middlewares server.js:15:12 body-parser deprecated urlencoded: explicitly specify "extended: true" for extended parsing node_modules/body-parser/index.js:74:29

Bu varsayılan midwareleri nerede bulabilirim? ya da bu hatayı almamalıyım?

var express     = require('express');
var server      = express();
var bodyParser  = require('body-parser');
var mongoose    = require('mongoose');
var passport    = require('./config/passport');
var routes      = require('./routes');

mongoose.connect('mongodb://localhost/myapp', function(err) {
    if(err) throw err;
});

server.set('view engine', 'jade');
server.set('views', __dirname + '/views');

server.use(bodyParser()); 
server.use(passport.initialize());

// Application Level Routes
routes(server, passport);

server.use(express.static(__dirname + '/public'));

server.listen(3000);

Yanıtlar:


730

O kullanarak anlamına gelir bodyParser() yapıcı olmuştur kaldırılmış 2014-06-19 tarihinden itibaren,.

app.use(bodyParser()); //Now deprecated

Şimdi yöntemleri ayrı ayrı çağırmanız gerekiyor

app.use(bodyParser.urlencoded());

app.use(bodyParser.json());

Ve bunun gibi.

Hala bir uyarı alıyorsanız urlencodedkullanmanız gerekir

app.use(bodyParser.urlencoded({
  extended: true
}));

Artık extendedvarsayılan bir değere sahip olmadığından, yapılandırma nesnesi anahtarının açıkça geçirilmesi gerekiyor.

Eğer Express kullanıyorsanız> = 4.16.0, vücut ayrıştırıcı yöntemleri altında-re eklendi express.json()ve express.urlencoded().


1
@eslammostafa Bodyparser kullanabilirsiniz, yapıcı diyemezsiniz. Her bir yöntemi çağırmanız gerekir.
Ben Fortune

2
@ BenFortune teşekkürler Ben, anladım, sadece / tmp şeyden endişeliydim, ama şimdi tekrar kontrol ettim, / tmp problemi sadece bodyParser'ı çok parçalı formları ayrıştırmak için kullandığımızda oluyor, andrewkelley.me/post/do-not-use -bodyparser-with-express-js.html i sonra çok parçalı formlar için müthiş kullanacağım.
schehata

23
Ne yapar extended?
Camilo Martin

1
farkın açıklaması yardımcı olacaktır. Aşağıda her ikisini de kullanabileceğinizi görüyorum. Ama neden? Dikkat etmeniz gereken noktalar nelerdir?
Harry Moreno

8
Ben gerçek genişletilmiş açıklar iyi yolu genişletilmiş edilen ortamlar olmasıdır curl --data "user[email]=foo&user[password]=bar" localhost:3000/login içinde sunucu tarafından kabul edileceğini req.bodyolarak { user[email]: "foo", ...}ise req.bodyolurdu {user: {email: "foo", ... }}ile extended: true.
reed_de_la_mer

156

Sıfır uyarı ister misiniz? Şöyle kullanın:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true
}));

Açıklama : extendedSeçeneğin varsayılan değeri kullanımdan kaldırıldı, yani açıkça doğru veya yanlış değeri iletmeniz gerekiyor.


1
Bunu hala "body-parser kullanımdan kaldırıldı" iletisini alıyorum. app.use(bodyParser.json()).use(bodyParser.urlencoded({ extended: true }));
Jeremy Thille

6
Bu şekilde çalışmaz. Json ve urlencoded için app.use () öğesini ayrı ayrı kullanmanız gerekir
mr-karan

14

Express'in eski sürümlerinde şunları kullanmak zorundaydık:

app.use(express.bodyparser()); 

çünkü gövde ayrıştırıcısı düğüm ve ekspres arasında bir ara katman yazılımıdır. Şimdi şöyle kullanmak zorundayız:

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

Bence "body-parser ara katman yazılımı" demek istediniz? Anladığım kadarıyla ekspres ara katman yazılımı değil
sakhunzai 19:18

9

Express> 4.16kullanıyorsanız express.json()veexpress.urlencoded()

express.json()Ve express.urlencoded()ara katman istek vücut ayrıştırma destek sağlamak için eklenmiştir dışı-box. Bu, aşağıdaki expressjs/body-parsermodül modülünü kullanır , bu nedenle şu anda modülü gerektiren uygulamalar yerleşik ayrıştırıcılara geçebilir.

Source Express 4.16.0 - Yayın tarihi: 2017-09-28

Bununla,

const bodyParser  = require('body-parser');

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

, olur

const express = require('express');

app.use(express.urlencoded({ extended: true }));
app.use(express.json());

8

body-parser, bir formun girişini okuyan ve onu req.body 'body-parser' yoluyla erişilebilen bir javascript nesnesi olarak saklayan bir ekspres ara katman yazılımıdır (aracılığıyla npm install --save body-parser) Daha fazla bilgi için bkz: https://github.com/expressjs/body -parser

   var bodyParser = require('body-parser');
   app.use(bodyParser.json()); // support json encoded bodies
   app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies

Tüm extendeddoğru olarak ayarlandığında, daha sonra (sıkıştırılmış) gövdeleri şişirilmiş olur sönük; zaman extendedfalse olarak ayarlanır, sönük cisimler reddedilir.


2

Kullanım ekspres-jeneratör için görüş mü başlamak iskelet proje üretecektir nedir without deprecated messagesGünlüğünüzde çıktı

bu komutu çalıştır

npm install express-generator -g

Şimdi, bu komutu yazarak yeni Express.js başlangıç ​​uygulaması oluşturun your Node projects folder.

express node-express-app

Bu komut, express'e adıyla yeni Node.js uygulaması oluşturmasını söyler node-express-app.

Daha sonra Go to the newly created project directory, install npm packagesve start the appkomutunu kullanarak

cd node-express-app && npm install && npm start

1

Eklerken buldum

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
  extended: true
}));

yardımcı olur, bazen ekspresin nasıl ifade edeceğini belirleyen sorgulama meselesidir.

Örneğin, parametreleriniz gövde yerine URL'ye geçirilmiş olabilir

Böyle bir durumda, yakalama hem gereken vücut ve url (aşağıda durumunda vücut parametreleri için tercih) parametreleri ve mevcut hangisi kullanım

app.route('/echo')
    .all((req,res)=>{
        let pars = (Object.keys(req.body).length > 0)?req.body:req.query;
        res.send(pars);
    });

-1

app.use(bodyParser.urlencoded({extended: true}));

Aynı problemim var ama bu benim için çalışıyor. Bu genişletilmiş kısmı deneyebilirsiniz.

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.