официант не стреляет поле, событие файла

В приведенном ниже коде вызывается только событие завершения.


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

app.use(Busboy());

app.post('/fileupload', function(req, res) {
  var fstream;

  req.pipe(req.busboy);

  req.busboy.on('error', function(err){
    console.log(err);
  });

  req.busboy.on('field', function(fieldname, val, valTruncated, keyTruncated) {
    console.log("fieldname: " + fieldname); 
  });

  req.busboy.on('file', function (fieldname, file, filename) {
    console.log("filename: " + filename); 
    fstream = fs.createWriteStream(__dirname + '/files/' + filename);
    file.pipe(fstream);
    fstream.on('close', function () {
      res.redirect('back');
      console.log("fileupload end");
    });
  });

  req.busboy.on('finish', function() {
    console.log('Done parsing form!');
  });
});

person Prayag C. Patel    schedule 18.10.2014    source источник
comment
Что выводит console.log(req.headers['content-type'])?   -  person mscdex    schedule 18.10.2014
comment
составные/данные формы; граница = gc0p4Jq0M2Yt08jU534c0p   -  person Prayag C. Patel    schedule 18.10.2014
comment
Если вы добавите req.on('data', function(d) { console.log('Saw ' + d.length + ' request bytes') }) к своему почтовому маршруту, вы увидите этот вывод?   -  person mscdex    schedule 18.10.2014
comment
выхода не увидел   -  person Prayag C. Patel    schedule 18.10.2014
comment
Хорошо, это означает, что какое-то другое промежуточное ПО перед опубликованным вами кодом считывает все данные запроса. Можете ли вы опубликовать другое промежуточное ПО, которое вы app.use() используете?   -  person mscdex    schedule 18.10.2014
comment
app.use (методПереопределение()); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true})); приложение.использовать(мульти()); app.use(express.static(path.join(__dirname, 'public')));   -  person Prayag C. Patel    schedule 18.10.2014
comment
удалить multer() и получить вывод Saw 64986 байт запроса Saw 33318 байт запроса Saw 65536 байт запроса Saw 10459 байт запроса   -  person Prayag C. Patel    schedule 18.10.2014
comment
но все же событие поля и файла не выполняется   -  person Prayag C. Patel    schedule 18.10.2014
comment
Попробуйте удалить добавленную вами строку отладки данных.   -  person mscdex    schedule 18.10.2014
comment
req.on('data', ....... удалено, но событие не вызвано   -  person Prayag C. Patel    schedule 18.10.2014


Ответы (1)


Причина, по которой вы не видите никаких данных, заключается в том, что вы уже используете модуль multer, который также анализирует запросы multipart/form-data, сохраняя файлы на диск. Если вы не используете multer и хотите использовать busboy вручную, как показано в вашем коде, вам нужно будет удалить строку app.use(multer());.

person mscdex    schedule 18.10.2014
comment
Да, правильно. и получить данные, но все же событие поля и файла не вызывается - person Prayag C. Patel; 18.10.2014
comment
Можете ли вы сбросить необработанные данные запроса и опубликовать их где-нибудь? - person mscdex; 18.10.2014
comment
Эти данные выглядят нормально для меня, если предположить, что окончания строк проверяются (они должны быть \r\n). Если вы можете воспроизвести проблему с помощью минимального теста (например, только http.createServer() и busboy), пожалуйста, опубликуйте код где-нибудь, чтобы я мог попробовать его со своей стороны. - person mscdex; 19.10.2014