express joga erro como `analisador de corpo descontinuado indefinido estendido`

127

No meu aplicativo de nó, estou usando express. tudo funciona bem, mas estou recebendo erro no cmd. Eu uso todos são módulos atualizados ...

meu código:

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

Erro:

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

Alguém pode me ajudar a entender esse problema, por favor?

3gwebtrain
fonte
@RamprasathSelvam - Sim, foi !!
3gwebtrain 4/10
@RamprasathSelvam - errado algo pode com o seu código, versão do módulo ou integração, verifique
3gwebtrain
Onde votamos na pior mensagem de erro de todos os tempos? Especialmente considerando que é altamente provável que isso aconteça, a mensagem parece um saco de palavras aleatórias.
spechter 29/07

Respostas:

263

Você deve definir explicitamente extendedpara, bodyParser.urlencoded()pois o valor padrão será alterado na próxima versão principal do body-parser. Exemplo:

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

Desde a expressversão 4.16.0, você também pode:

app.use(express.urlencoded({ extended: true }))
mscdex
fonte
11
O que isso faz?
Samarth Agarwal
6
@SamarthAgarwal De acordo com a leia-me , ele usa o qsmódulo para analisar o corpo que permite a um conjunto aninhado como sintaxe para ser analisado, tais como test[foo][bar]=baz(que se torna {'test': {'foo': {'bar': 'baz'}}})
Bailey Parker
35

Atenção: Com express version => 4.16.0o body-parsermiddleware foi incluído novamente nos métodos express.urlencoded()eexpress.json()

Que pode ser usado como:

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

O erro diz que você precisa fornecer a opção estendida para o analisador de corpo da seguinte forma:

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

A partir do Express versão 4.16.0, espera-se que você transmita propriedades estendidas dentro do bodyParser.urlencoded ()

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

Consulte a página de documentação do npm.js. para obter uma amostra: https://www.npmjs.com/package/body-parser#expressconnect-top-level-generic

tMan44wiz
fonte
0

Se você está aqui, depois de maio de 2020, isso significa que você certamente está usando o nó da versão v13.12.0. Então, app.use (express.urlencoded ({extended: true}))

Isso certamente vai funcionar para você .... # paz

SüŽan Bhattarai
fonte
-1

Defina o limite de 50 MB para evitar erros de manipulação de dados.

  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
fonte