bodyParser ist veraltet Express 4


398

Ich verwende Express 4.0 und bin mir bewusst, dass der Body Parser aus dem Express Core entfernt wurde. Ich verwende den empfohlenen Ersatz, aber ich bekomme

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

Wo finde ich diese angeblichen Middlewares? oder sollte ich diesen Fehler nicht bekommen?

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);

Antworten:


730

Es bedeutet , dass die Verwendung von bodyParser() Konstruktor wurde als veraltet , wie von 2014.06.19.

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

Sie müssen die Methoden jetzt separat aufrufen

app.use(bodyParser.urlencoded());

app.use(bodyParser.json());

Und so weiter.

Wenn Sie immer noch eine Warnung erhalten urlencoded, müssen Sie diese verwenden

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

Der extendedKonfigurationsobjektschlüssel muss jetzt explizit übergeben werden, da er jetzt keinen Standardwert hat.

Wenn Sie Express> = 4.16.0 verwenden, wurde der Body-Parser unter den Methoden express.json()und erneut hinzugefügt express.urlencoded().


1
@eslammostafa Sie können bodyparser verwenden, Sie können den Konstruktor einfach nicht aufrufen. Sie müssen jede einzelne Methode aufrufen.
Ben Fortune

2
@ BenFortune danke Ben, ich habe es verstanden, ich habe mir nur Sorgen um das / tmp-Ding gemacht, aber jetzt habe ich es noch einmal überprüft. Das / tmp-Problem tritt nur auf, wenn wir bodyParser zum Parsen mehrteiliger Formulare verwendet haben, andrewkelley.me/post/do-not-use -bodyparser-with-express-js.html Ich werde formidable dann für mehrteilige Formulare verwenden.
Schehata

23
Was macht extendeddas
Camilo Martin

1
Eine Erklärung des Unterschieds wäre hilfreich. Ich sehe auch unten, dass Sie einfach beide verwenden können. Aber warum? Welche Überlegungen sollten Sie anstellen?
Harry Moreno

8
Der beste Weg , ich wahr erweiterte erklären ist , dass keine erweiterten Mittel verwenden , die curl --data "user[email]=foo&user[password]=bar" localhost:3000/login in vom Server empfangen werden würden req.bodywie { user[email]: "foo", ...}während req.bodywäre {user: {email: "foo", ... }}mit extended: true.
reed_de_la_mer

156

Willst du keine Warnungen ? Verwenden Sie es so:

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

Erläuterung : Der Standardwert der extendedOption ist veraltet. Dies bedeutet, dass Sie den Wert true oder false explizit übergeben müssen.


1
Ich benutze dies und erhalte immer noch die Meldung "Body-Parser veraltet". app.use(bodyParser.json()).use(bodyParser.urlencoded({ extended: true }));
Jeremy Thille

6
So wird es nicht funktionieren. Sie müssen app.use () separat für json und urlencoded verwenden
mr-karan

14

In älteren Versionen von Express mussten wir Folgendes verwenden:

app.use(express.bodyparser()); 

weil Body-Parser eine Middleware zwischen Node und Express war. Jetzt müssen wir es wie folgt verwenden:

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

Ich denke, Sie wollten sagen "Body-Parser war Middleware"? Express ist keine Middleware, wie ich verstehe
Sakhunzai

9

Wenn Sie Express> verwenden 4.16, können Sie express.json()und verwendenexpress.urlencoded()

Die express.json()und die express.urlencoded()Middleware wurden hinzugefügt, um sofort eine Unterstützung für das Parsen von Anforderungskörpern zu bieten. Hierbei wird das expressjs/body-parserModulmodul darunter verwendet, sodass Apps, für die das Modul derzeit separat benötigt wird, zu den integrierten Parsern wechseln können.

Source Express 4.16.0 - Erscheinungsdatum: 28.09.2017

Mit diesem,

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

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

wird,

const express = require('express');

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

8

body-parser ist eine Express-Middleware, die die Eingabe eines Formulars liest und als Javascript-Objekt speichert, auf das über req.body 'body-parser' zugegriffen werden kann. Es muss installiert werden (via npm install --save body-parser). Weitere Informationen finden Sie unter: 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

Wenn extendedtrue eingestellt ist, werden entleerte (komprimierte) Körper aufgeblasen. Wenn der extendedWert auf false gesetzt ist, werden entleerte Körper zurückgewiesen.


2

Was ist Ihre Meinung zur Verwendung des Express-Generators, der zunächst ein Skelettprojekt generiert, without deprecated messagesdas in Ihrem Protokoll angezeigt wird?

Führen Sie diesen Befehl aus

npm install express-generator -g

Erstellen Sie jetzt eine neue Express.js-Starteranwendung, indem Sie diesen Befehl eingeben your Node projects folder.

express node-express-app

Dieser Befehl weist express an, eine neue Node.js-Anwendung mit dem Namen zu generieren node-express-app.

dann Go to the newly created project directory, install npm packagesund start the appmit dem Befehl

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

1

Das habe ich beim Hinzufügen gefunden

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

hilft, manchmal ist es eine Frage Ihrer Abfrage, die bestimmt, wie Express damit umgeht.

Zum Beispiel könnte es sein, dass Ihre Parameter in der URL und nicht im Text übergeben werden

In einem solchen Fall müssen Sie sowohl die Body- als auch die URL- Parameter erfassen und die verfügbaren verwenden (wobei die Body-Parameter im folgenden Fall bevorzugt werden).

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}));

Ich habe das gleiche Problem, aber diese Arbeit für mich. Sie können diesen erweiterten Teil ausprobieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.