688 Stimmen

BodyParser ist veraltet express 4

Ich verwende Express 4.0 und bin mir bewusst, dass der Body Parser aus dem Express-Kern entfernt wurde. Ich verwende den empfohlenen Ersatz, bekomme jedoch folgende Fehlermeldung:

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

1005voto

Ben Fortune Punkte 30223

Das bedeutet, dass die Verwendung des bodyParser() Konstruktors ab dem 19.06.2014 veraltet ist.

app.use(bodyParser()); //Jetzt veraltet

Jetzt müssen die Methoden separat aufgerufen werden

app.use(bodyParser.urlencoded());

app.use(bodyParser.json());

Und so weiter.

Falls immer noch eine Warnung mit urlencoded angezeigt wird, müssen Sie

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

Der Schlüssel extended im Config-Objekt muss nun explizit übergeben werden, da er jetzt keinen Standardwert mehr hat.

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

465voto

Jan Peša Punkte 6500

Möchten Sie keine Warnungen? Verwenden Sie es so:

// Express v4.16.0 und höher
// --------------------------
const express = require('express');

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

// Für Express-Versionen unter 4.16.0
// ------------------------------------
const bodyParser = require('body-parser');

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

Erklärung: Der Standardwert der Option extended wurde veraltet, was bedeutet, dass Sie explizit den Wert true oder false übergeben müssen.

Hinweis für Express 4.16.0 und höher: Der Body-Parser wurde wieder hinzugefügt, um die Unterstützung für das Parsen des Anforderungstextkörpers von Haus aus bereitzustellen.

233voto

Sridhar Punkte 11066

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

Die Middleware express.json() und express.urlencoded() wurde hinzugefügt, um die Unterstützung für die Analyse des Anforderungskörpers von Haus aus bereitzustellen. Dabei wird das Modul expressjs/body-parser verwendet, sodass Apps, die das Modul bisher separat benötigen, auf die integrierten Parser umsteigen können.

Quelle Express 4.16.0 - Veröffentlichungsdatum: 2017-09-28

Mit diesem Update,

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

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

wird zu,

const express = require('express');

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

80voto

Abraham Punkte 4525

Verwenden Sie keinen Body-Parser

Wenn Sie Express 4.16+ verwenden, können Sie dies einfach mit express tun:

app.use(express.urlencoded({extended: true}));
app.use(express.json()) // Zum Parsen der eingehenden Anfragen mit JSON-Payloads

Sie können jetzt body-parser deinstallieren mit npm uninstall body-parser

Um den POST-Inhalt zu erhalten, können Sie req.body verwenden

app.post("/yourpath", (req, res)=>{

    var postData = req.body;

    //Oder wenn dies nicht funktioniert

    var postData = JSON.parse(req.body);
});

Ich hoffe, das hilft

43voto

Sogar ich hatte das gleiche Problem. Die unten genannte Änderung hat mein Problem gelöst.

Wenn Sie die Version Express 4.16+ verwenden, dann

  • Sie haben möglicherweise eine Zeile Ihrem Code hinzugefügt, die wie folgt aussieht:

    app.use(bodyparser.json()); // verwendet das body-parser Paket

  • Sie können die obige Zeile nun durch folgendes ersetzen:

    app.use(express.json()); // Wird zum Parsen von JSON-Body verwendet

Dies sollte keine Änderungen in Ihren Anwendungen verursachen, da der Code in express.json() auf bodyparser.json() basiert.

  • Wenn Sie auch den folgenden Code in Ihrer Umgebung haben:

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

  • Sie können die obige Zeile durch folgendes ersetzen:

    app.use(express.urlencoded()); // Parse URL-codierte Bodies

  • Wenn Sie eine Warnung erhalten, dass Sie immer noch extended an express.urlencoded() übergeben müssen, dann aktualisieren Sie den obigen Code wie folgt:

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

Eine abschließende Vorsichtsmaßnahme:

Es ist möglicherweise nicht erforderlich, das zusätzliche body-parser Paket in Ihrer Anwendung zu installieren, wenn Sie Express 4.16+ verwenden. Viele Tutorials enthalten die Installation von body-parser, weil sie vor der Veröffentlichung von Express 4.16 verfasst wurden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X