'ขยาย' หมายถึงอะไรใน express 4.0?


90

ฉันใช้ Express และ body-parser ในแอปของฉัน

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

แต่ 'ขยาย' หมายถึงอะไรใน express 4.0?

เจอแบบนี้

extended - parse extended syntax with the qs module.

อย่างไรก็ตามฉันยังไม่เข้าใจว่ามันหมายถึงอะไร

คำตอบ:


155

หากextendedเป็นfalseเช่นนั้นคุณจะโพสต์ "วัตถุที่ซ้อนกัน" ไม่ได้

person[name] = 'cw'

// Nested Object = { person: { name: cw } }

หากextendedเป็นtrueเช่นนั้นคุณสามารถทำอะไรก็ได้ที่คุณต้องการ



80

เมื่อextendedตั้งค่าคุณสมบัติเป็นtrueข้อมูลที่ถูกเข้ารหัส URL จะถูกแยกกับห้องสมุด qs

ในทางตรงกันข้าม,

เมื่อextendedคุณสมบัติถูกตั้งค่าเป็นfalseข้อมูลที่เข้ารหัส URL จะถูกแยกวิเคราะห์ด้วยไลบรารีสตริงคำค้นหาแทน


ความแตกต่างระหว่างการแยกวิเคราะห์ด้วย "qs library" กับ "querystring library"

  • qsไลบรารีช่วยให้คุณสร้างไฟล์วัตถุที่ซ้อนกันจากสตริงแบบสอบถามของคุณ

    var qs = require("qs")
    var result = qs.parse("person[name]=bobby&person[age]=3")
    console.log(result) // { person: { name: 'bobby', age: '3' } }
    


  • ไลบรารีสตริงการสืบค้นไม่ได้สนับสนุนการสร้างวัตถุที่ซ้อนกันจากสตริงการสืบค้นของคุณ

    var queryString = require("query-string")
    var result = queryString.parse("person[name]=bobby&person[age]=3")
    console.log(result) // { 'person[age]': '3', 'person[name]': 'bobby' }
    


  • qsไลบรารีจะไม่กรอง "?" ออก จากสตริงการสืบค้น

    var qs = require("qs")
    var result = qs.parse("?a=b")
    console.log(result) // { '?a': 'b' }
    


  • ไลบรารีสตริงการสืบค้นจะกรอง "?" ออก จากสตริงการสืบค้น

    var queryString = require("query-string")
    var result = queryString.parse("?a=b")
    console.log(result) // { a: 'b' }
    

app.use(bodyParser.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded


สำหรับข้อมูลเพิ่มเติมคุณสามารถอ้างถึงคำตอบของ Leonid Beschastnyและnpm เปรียบเทียบ qs กับ query-stringสตริงแบบสอบถาม



1
ควรเป็นคำตอบที่เลือก
nishi

สิ่งนี้จะต้องเลือกเป็นคำตอบที่ถูกต้อง
AwsAnurag

21

จากเอกสาร Body-Parser:

อ็อบเจ็กต์ของร่างกายใหม่ที่มีข้อมูลที่แยกวิเคราะห์จะถูกเติมข้อมูลบนอ็อบเจ็กต์คำขอหลังมิดเดิลแวร์ (เช่น req.body) ออบเจ็กต์นี้จะมีคู่คีย์ - ค่าซึ่งค่าอาจเป็นสตริงหรืออาร์เรย์ (เมื่อขยายเป็นเท็จ) หรือประเภทใดก็ได้ (เมื่อขยายเป็นจริง)

และ

ตัวเลือกเพิ่มเติมอนุญาตให้เลือกระหว่างการแยกวิเคราะห์ข้อมูลที่เข้ารหัส URL กับไลบรารีสตริงการสืบค้น (เมื่อเป็นเท็จ) หรือไลบรารี qs (เมื่อเป็นจริง) ไวยากรณ์แบบ "ขยาย" อนุญาตให้เข้ารหัสออบเจ็กต์และอาร์เรย์ที่สมบูรณ์เป็นรูปแบบที่เข้ารหัส URL ซึ่งช่วยให้ได้รับประสบการณ์ที่เหมือน JSON ด้วยการเข้ารหัส URL สำหรับข้อมูลเพิ่มเติมโปรดดูห้องสมุด qs

การขยายโดยทั่วไปช่วยให้คุณสามารถแยกวิเคราะห์วัตถุแบบเต็มได้

ตัวแยกวิเคราะห์เนื้อหา: เข้ารหัส URL

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.