помилка кидків експрес як "застарілий синтаксичний аналізатор тіла невизначений розширений"


127

У моєму додатку для вузлів я використовую express. все працює добре, але я отримую помилку в cmd. Я використовую всі оновлені модулі ...

мій код:

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

Помилка:

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: 'jbarif@gmail.com', password: 'pass' } // i am getting response

Чи можете мені допомогти зрозуміти це питання?


@RamprasathSelvam - Так, це було !!
3gwebtrain

@RamprasathSelvam - можливо, у вашому коді, версії модуля чи інтеграції щось не так, будь ласка, перевірте
3gwebtrain

Де ми голосуємо за найгірше повідомлення про помилку? Особливо враховуючи, що це дуже імовірно, це повідомлення просто схоже на мішок випадкових слів.
spechter

Відповіді:


263

Ви повинні явно вказати extendedна bodyParser.urlencoded()так значення за замовчуванням буде змінюватися в наступній версії з body-parser. Приклад:

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

З express4.16.0 ви також можете:

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

11
Що це робить?
Самарт Агарвал

6
@SamarthAgarwal Відповідно до readme , він використовує qsмодуль для розбору тіла, що дозволяє аналізувати вкладений масив, як синтаксис, такий як test[foo][bar]=baz(який стає {'test': {'foo': {'bar': 'baz'}}})
Бейлі Паркер


14

Помилка говорить про те, що вам потрібно надати розширений параметр для аналізатора тіла так:

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

0

Починаючи з експрес- версії 4.16.0, очікується, що ви перейдете до розширеного властивості всередині bodyParser.urlencoded ()

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

Дивіться сторінку з документацією npm.js для зразка: https://www.npmjs.com/package/body-parser#expressconnect-top-level-generic


0

Якщо ви знаходитесь тут, після травня-2020, це означає, що ви напевно використовуєте вузол версії v13.12.0 .. Отже, app.use (express.urlencoded ({extension: true}))

Це, звичайно, працює для вас .... # мир


-1

Встановіть ліміт 50 Мб, щоб уникнути помилки обробки даних.

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

    app.use(bodyParser.urlencoded({
        limit : '50mb', ///////// LIMIT for URL ENCODE (image data)
        extended : true
      }));
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.