ด่วนแสดงข้อผิดพลาดเป็น "ตัวแยกวิเคราะห์เนื้อหาที่เลิกใช้งานส่วนขยายที่ไม่ได้กำหนด"


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

คำตอบ:


268

คุณจะต้องมีการกำหนดอย่างชัดเจนextendedสำหรับbodyParser.urlencoded()ตั้งแต่ค่าเริ่มต้นเป็นไปเพื่อการเปลี่ยนแปลงในรุ่นที่สำคัญต่อไปbody-parserของ ตัวอย่าง:

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

ตั้งแต่express4.16.0 คุณยังสามารถทำ:

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

11
สิ่งนี้ทำอะไร?
Samarth Agarwal

6
@SamarthAgarwal ตามreadmeมันใช้qsโมดูลเพื่อแยกวิเคราะห์เนื้อหาซึ่งช่วยให้อาร์เรย์ที่ซ้อนกันเช่นไวยากรณ์สามารถแยกวิเคราะห์ได้เช่นtest[foo][bar]=baz(ซึ่งกลายเป็น{'test': {'foo': {'bar': 'baz'}}})
Bailey Parker

35

เรียนด้วยมิดเดิลแวร์ถูกเพิ่มกลับมาอยู่ใต้วิธีการและexpress version => 4.16.0body-parserexpress.urlencoded()express.json()

ซึ่งสามารถใช้เป็น:

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

14

ข้อผิดพลาดระบุว่าคุณต้องระบุตัวเลือกเพิ่มเติมสำหรับตัวแยกวิเคราะห์เนื้อหาดังนี้:

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

0

จากExpressเวอร์ชัน 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 ({ขยาย: true}))

สิ่งนี้จะใช้ได้ผลกับคุณแน่นอน .... # peace


-1

กำหนดขีด จำกัด 50 MB เพื่อหลีกเลี่ยงข้อผิดพลาดในการจัดการข้อมูลใน urlencode จำกัด 50mb สำหรับช่วยให้คุณส่ง imageData throw url

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

    app.use(bodyParser.urlencoded({
        limit : '50mb', ///////// LIMIT for URL ENCODE (image data)
        extended : true
      }));
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.