632 votes

bodyParser est déprécié express 4

J'utilise express 4.0 et je sais que l'analyseur de corps a été retiré du noyau d'express. J'utilise le remplacement recommandé, mais j'obtiens les résultats suivants

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

Où puis-je trouver ces supposés middlewares ? ou ne devrais-je pas avoir cette erreur ?

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

3 votes

Note pour les futurs lecteurs, le script de l'OP utilise var server = express() mais en lisant (apparemment TOUTES) les réponses ci-dessous, supposez que la ligne var app = express() a été utilisé.

952voto

Ben Fortune Points 7084

Cela signifie qu'en utilisant le bodyParser() Constructeur a été déprécié en date du 2014-06-19.

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

Vous devez maintenant appeler les méthodes séparément

app.use(bodyParser.urlencoded());

app.use(bodyParser.json());

Et ainsi de suite.

Si vous recevez toujours un avertissement avec urlencoded vous devez utiliser

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

Le site extended La clé de l'objet config doit maintenant être passée explicitement, puisqu'elle n'a pas de valeur par défaut.

Si vous utilisez Express >= 4.16.0, l'analyseur de corps a été ajouté sous les méthodes express.json() et express.urlencoded() .

0 votes

J'ai le même avertissement après la mise à jour body-parser à 1.4.3 et express à 4.4.4 . La ligne qui donne l'alerte : app.use(bodyParser.urlencoded());

0 votes

Est-il encore possible d'utiliser bodyParser ?

2 votes

@eslammostafa Vous pouvez utiliser bodyparser, vous ne pouvez simplement pas appeler le constructeur. Vous devez appeler chaque méthode individuelle.

427voto

smajl Points 1038

Vous voulez zéro avertissement ? Utilisez-le comme ceci :

// Express v4.16.0 and higher
// --------------------------
const express = require('express');

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

// For Express version less than 4.16.0
// ------------------------------------
const bodyParser = require('body-parser');

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

Explication : La valeur par défaut de la extended a été dépréciée, ce qui signifie que vous devez explicitement passer la valeur true ou false.

Note pour Express 4.16.0 et supérieur L'analyseur de corps de requête a été ajouté pour fournir un support d'analyse de corps de requête prêt à l'emploi.

4 votes

J'utilise ceci, mais je reçois toujours le message "body-parser deprecated". app.use(bodyParser.json()).use(bodyParser.urlencoded({ extended: true }));

0 votes

@MuhammadAdeel Merci pour la correction.

0 votes

C'est vrai, j'ai un avertissement de dépréciation en accédant au constructeur. Il est inclus dans Express 4.17 comme une dépendance) : nodejs.dev/learn/get-http-request-body-data-using-nodejs

213voto

Sridhar Points 5668

Si vous utilisez express > 4.16 vous pouvez utiliser express.json() et express.urlencoded()

Le site express.json() et express.urlencoded() ont été ajoutés pour fournir une prise en charge immédiate de l'analyse du corps des requêtes. Ceci utilise le expressjs/body-parser sous le module, de sorte que les applications qui requièrent actuellement le module séparément peuvent passer aux analyseurs intégrés.

Source : Express 4.16.0 - Date de publication : 2017-09-28

Avec ça,

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

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

devient,

const express = require('express');

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

10 votes

Cela signifie que nous n'avons plus besoin d'installer le body parser ? ?

10 votes

Oui. nous ne le considérons pas comme un paquet séparé, puisqu'il est maintenant disponible comme une partie de l'express.

0 votes

J'obtiens SyntaxError : Unxpected token n in JSON at position 6 at JSON.parse (<anonymous>)

43voto

Prithvi Points 184

J'ai aussi rencontré le même problème. Le changement ci-dessous que j'ai mentionné a résolu mon problème.

Si vous utilisez Express 4.16 version, alors

  • Vous avez peut-être ajouté une ligne à votre code qui ressemble à ce qui suit :

    app.use(bodyparser.json()); //utilizes the body-parser package

  • Vous pouvez maintenant remplacer la ligne ci-dessus par :

    app.use(express.json()); //Used to parse JSON bodies

Cela ne devrait pas introduire de modifications radicales dans vos applications puisque le code dans express.json() est basé sur bodyparser.json().

  • Si vous avez également le code suivant dans votre environnement :

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

  • Vous pouvez remplacer la ligne ci-dessus par :

    app.use(express.urlencoded()); //Parse URL-encoded bodies

Une dernière mise en garde :

Vous n'aurez peut-être pas besoin d'installer le paquetage supplémentaire body-parser dans votre application si vous utilisez Express 4.16+. Il existe de nombreux tutoriels qui incluent l'installation de body-parser car ils sont antérieurs à la version 4.16 d'Express.

0 votes

C'est intéressant parce qu'en dessous express.json() utilisent le même body-parse.json()

0 votes

Ouais ! Mais d'une certaine manière, le express.JS L'équipe de développement a simplifié la stratégie d'analyse/configuration de json en remplaçant simplement une ligne de code par une autre, ce qui, syntaxiquement, ne fait pas grande différence.

0 votes

Ma console dit que je dois encore passer extended à express.urlencoded({extended: true}) en utilisant express 4.17.1

17voto

himanshu yadav Points 31

Dans les anciennes versions d'express, nous devions utiliser :

app.use(express.bodyparser()); 

parce que le body-parser était un intergiciel entre node et express. Maintenant nous devons l'utiliser comme :

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

0 votes

Je pense que vous vouliez dire "body-parser was middleware" ? express n'est pas un middleware d'après ce que j'ai compris.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X