Express & Connect-busboy ละเว้นจากคำขอบางอย่าง

ฉันใช้ Connect-busboy กับ Express:

var busboy = require('connect-busboy');

app.configure(function () {
    app.use(express.logger());
    app.use(busboy());
    app.use(bodyParser());
    app.use(function(err, req, res, next){
        res.send(500, 'error');
    });

และด้วยการร้องขอดังต่อไปนี้:

app.post('/save', function (req, res) { 
       console.log("Got request")
         try {
         console.log("I got it");
         req.pipe(req.busboy);
         var name = "";
         var start = "";
         var fstream;
        req.busboy.on('field', function (fieldname, val, fieldnameTruncated, valTruncated) { }


        req.busboy.on('file', function (fieldname, file) {
           //some code
        }

        req.busboy.on('error', function (error) {
                console.log("Error in uploading file with chunks: "  + error);
            // some code
         })
        req.busboy.on('finish', function () {
               fstream.on('close', function(){
                       //some code
    })
})

ลูกค้าส่งคำขอ 6 รายการให้ฉันเพื่อบันทึกคำสั่ง ฉันได้รับคำขอ 2-6 รายการที่ไม่สอดคล้องกัน

หมายความว่า Got request พิมพ์เพียง 2 ครั้ง แต่ไคลเอ็นต์ส่งคำขอ 6 ครั้ง

เมื่อฉันลบบรรทัด app.use(busboy()); Express.app จะได้รับคำขอ 6 (แต่ฉันไม่สามารถใช้ฟังก์ชันนี้ได้เนื่องจาก req.busboy.on ใช้งานไม่ได้)

ข้อสรุปคือ app.use(busboy()); เพิกเฉยต่อคำขอบางรายการจากไคลเอ็นต์ และ app.post จะไม่เริ่มทำงาน ฉันจะแก้ปัญหาได้อย่างไร?


person Or Smith    schedule 14.08.2014    source แหล่งที่มา
comment
Connect-busboy ไม่ได้สิ้นสุดคำขอใด ๆ เพียงแค่เรียก next() เพื่อไปยังมิดเดิลแวร์ / เส้นทางถัดไป ซอร์สโค้ดนั้นค่อนข้างง่าย   -  person mscdex    schedule 14.08.2014
comment
@mscdex: แล้วทำไมมันถึงเกิดขึ้น?   -  person Or Smith    schedule 14.08.2014
comment
ทั้งหมดที่ฉันสามารถพูดได้ก็คือปัญหาไม่ได้อยู่ที่โค้ดใด ๆ ที่คุณโพสต์ไว้   -  person mscdex    schedule 14.08.2014
comment
@mscdex: แต่เมื่อฉันลบบรรทัด app.use(busboy()); ฉันประสบความสำเร็จในการรับคำขอทั้งหมด   -  person Or Smith    schedule 14.08.2014
comment
ลองแทนที่ app.use(busboy()); ด้วย app.use(function(req,res,next){next();});   -  person mscdex    schedule 14.08.2014
comment
แต่ฉันใช้ req.busboy.on ในคำขอ...   -  person Or Smith    schedule 14.08.2014


คำตอบ (1)


สิ่งหนึ่งที่คุณควรทำคือลบ app.use(bodyParser()); เนื่องจาก Busboy กำลังจัดการการแยกวิเคราะห์เนื้อหาอยู่แล้ว

person mscdex    schedule 14.08.2014