bodyParser est déprécié express 4

398

J'utilise express 4.0 et je suis conscient que l'analyseur corporel a été retiré du noyau express, j'utilise le remplacement recommandé, mais je reçois

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 recevoir 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);
Melbourne2991
la source

Réponses:

730

Cela signifie que l'utilisation du bodyParser() constructeur est obsolète depuis le 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());

Etc.

Si vous recevez toujours un avertissement, urlencodedvous devez utiliser

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

La extendedclé d'objet de configuration doit maintenant être explicitement transmise, car elle n'a plus de valeur par défaut.

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

Ben Fortune
la source
1
@eslammostafa Vous pouvez utiliser bodyparser, vous ne pouvez tout simplement pas appeler le constructeur. Vous devez appeler chaque méthode individuelle.
Ben Fortune
2
@ BenFortune merci Ben, je l'ai eu, je craignais juste la chose / tmp, mais maintenant j'ai vérifié à nouveau, le problème / tmp ne se produit que si nous avons utilisé bodyParser pour analyser les formulaires en plusieurs parties , etrewkelley.me/post/do-not-use -bodyparser-with-express-js.html je vais utiliser formidable alors pour les formulaires en plusieurs parties .
schehata
23
Que fait extended-il?
Camilo Martin
1
une explication de la différence serait utile. Je vois également ci-dessous que vous pouvez simplement utiliser les deux. Mais pourquoi? Quelles considérations devez-vous prendre?
Harry Moreno
8
La meilleure façon d'expliquer true étendu est que ne pas utiliser de moyens étendus qui curl --data "user[email]=foo&user[password]=bar" localhost:3000/login seraient reçus par le serveur req.bodycomme { user[email]: "foo", ...}alors req.bodyqu'ils le seraient {user: {email: "foo", ... }}avec extended: true.
reed_de_la_mer
156

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

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

Explication : la valeur par défaut de l' extendedoption a été déconseillée, ce qui signifie que vous devez explicitement transmettre une valeur vraie ou fausse.

smajl
la source
1
J'utilise ceci, en obtenant toujours le message "body-parser obsolète". app.use(bodyParser.json()).use(bodyParser.urlencoded({ extended: true }));
Jeremy Thille
6
Ce n'est pas ainsi que cela fonctionnera. Vous devez utiliser app.use () séparément pour json et urlencoded
mr-karan
14

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

app.use(express.bodyparser()); 

parce que l'analyseur de corps était un middleware entre nœud et express. Maintenant, nous devons l'utiliser comme:

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
himanshu yadav
la source
Je pense que vous vouliez dire "l'analyseur corporel était un middleware"? express n'est pas un middleware si je comprends bien
sakhunzai
9

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

Le middleware express.json()et express.urlencoded()ont été ajoutés pour fournir un support d'analyse du corps de la demande prêt à l'emploi. Celui-ci utilise le expressjs/body-parsermodule module en dessous, de sorte que les applications qui nécessitent actuellement le module séparément peuvent basculer vers les analyseurs intégrés.

Source Express 4.16.0 - Date de sortie: 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());
Sridhar
la source
8

body-parser est un morceau de middleware express qui lit l'entrée d'un formulaire et le stocke en tant qu'objet javascript accessible via req.body 'body-parser' doit être installé (via npm install --save body-parser) Pour plus d'informations, voir: https://github.com/expressjs/body -analyseur

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

Lorsque extendedest défini sur true, les corps dégonflés (compressés) seront gonflés; lorsqu'il extendedest défini sur faux, les corps dégonflés sont rejetés.

Parth Raval
la source
2

Quelle est votre opinion pour utiliser express-generator, il générera un projet squelette pour commencer, without deprecated messagesapparu dans votre journal

exécutez cette commande

npm install express-generator -g

Maintenant, créez une nouvelle application de démarrage Express.js en saisissant cette commande your Node projects folder.

express node-express-app

Cette commande indique à express de générer une nouvelle application Node.js avec le nom node-express-app.

puis Go to the newly created project directory, install npm packageset en start the apputilisant la commande

cd node-express-app && npm install && npm start
Basheer AL-MOMANI
la source
1

J'ai trouvé qu'en ajoutant

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

aide, parfois c'est une question de requête qui détermine comment express la gère.

Par exemple, il se pourrait que vos paramètres soient passés dans l' URL plutôt que dans le corps

Dans un tel cas, vous devez capturer les paramètres de corps et d' URL et utiliser celui qui est disponible (avec une préférence pour les paramètres de corps dans le cas ci-dessous)

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

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

J'ai le même problème mais cela fonctionne pour moi. Vous pouvez essayer cette partie étendue.

Mehedi Abdullah
la source