express lève une erreur en tant que `body-parser obsolète non défini étendu`

127

Dans mon application de nœud, j'utilise express. tout fonctionne bien, mais j'obtiens une erreur dans le cmd. J'utilise tous les modules mis à jour ...

mon code:

var express = require('express');
var bodyParser = require('body-parser');
var jade = require('jade');
var app = express();
app.set('view engine', 'jade');
app.set('views', __dirname + '/views');
app.use(express.static(__dirname + '/public'));


app.use(bodyParser.json()); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded()); // to support URL-encoded bodies


app.get('/',function(req,res){
    res.render('index.jade');
});

app.get('/login',function(req,res){
    res.render('index.jade');
});

app.post('/login',function(req,res){
    console.log(req.body);
});

app.get('/signup',function(req,res){
    res.render('signup.jade');
});

var env = process.env.PORT || 3000;


app.listen(env, function(req, res){
    console.log('i am working!');
});

Erreur:

D:\myLogin>node app
body-parser deprecated undefined extended: provide extended option app.js:11:20 //why i am getting this?
i am working!
{ username: '[email protected]', password: 'pass' } // i am getting response

Quelqu'un peut-il m'aider à comprendre ce problème s'il vous plaît?

3gwebtrain
la source
@RamprasathSelvam - Oui, c'était !!
3gwebtrain
@RamprasathSelvam - il y a peut-être un problème avec votre code, la version du module ou l'intégration, veuillez vérifier
3gwebtrain
Où votons-nous pour le pire message d'erreur de tous les temps? Surtout compte tenu du fait que cela est très probable, le message ressemble à un sac de mots aléatoires.
spechter le

Réponses:

264

Vous devez définir explicitement extendedpour bodyParser.urlencoded()car la valeur par défaut va changer dans la prochaine version majeure de body-parser. Exemple:

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

Depuis la express4.16.0, vous pouvez également faire:

app.use(express.urlencoded({ extended: true }))
mscdex
la source
11
Qu'est-ce que cela fait?
Samarth Agarwal
6
@SamarthAgarwal Selon le readme , il utilise le qsmodule pour analyser le corps, ce qui permet d'analyser un tableau imbriqué comme la syntaxe comme test[foo][bar]=baz(qui devient {'test': {'foo': {'bar': 'baz'}}})
Bailey Parker
35

Attention: avec express version => 4.16.0le body-parsermiddleware a été ajouté sous les méthodes express.urlencoded()etexpress.json()

Qui peut être utilisé comme:

app.use(express.urlencoded({extended: true})); 
app.use(express.json());   
Dhiral Kaniya
la source
14

L'erreur indique que vous devez fournir l'option étendue pour l'analyseur corporel comme suit:

app.use(bodyParser.urlencoded({ extended: false }))
mfreitas
la source
0

À partir de la version 4.16.0 d' Express , on s'attend à ce que vous passiez une propriété étendue à l'intérieur de bodyParser.urlencoded ()

//  parse JSON-encoded bodies and URL-encoded bodies
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

Voir la page de documentation de npm.js pour un exemple: https://www.npmjs.com/package/body-parser#expressconnect-top-level-generic

tMan44wiz
la source
0

Si vous êtes ici, après mai 2020, cela signifie que vous utilisez sûrement le nœud de la version v13.12.0 .. Donc, app.use (express.urlencoded ({extended: true}))

Cela fonctionnera sûrement pour vous .... # paix

SüŽan Bhattarai
la source
-1

Définissez la limite de 50 Mo pour éviter les erreurs de gestion des données.

  app.use(bodyParser.json({
        limit : '50mb'    ///////// LIMIT for JSON
      }));

    app.use(bodyParser.urlencoded({
        limit : '50mb', ///////// LIMIT for URL ENCODE (image data)
        extended : true
      }));
Gowtham Sooryaraj
la source