Express & connect-busboy игнорирует некоторые запросы

Я использую connect-busboy с экспрессом:

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());, потому что официант уже занимается разбором тела.

person mscdex    schedule 14.08.2014