@Halyluya

Как распарсить FormData запрос в nodejs?

Опять нужна помощь сообщества, сам уже в тупик зашел.
Суть в чем, с сайта загружают файлы на сервер (картинки) сервер их пережевывает, что-то делает и сохраняет куда-то там, не суть важно. Весь код это "облегченный" без проверок, упрощенный для наглядности.
Код со стороны клиента:
// ткнули в input, выбрали файл и сработало событие 'change'
    var files = event.target.files;  // получили FileList

   for (var i = 0; i < files.length; i++) {
	var file = files[i];
		
	// оформляем отправку данных
	var form = new FormData();
	form.append("name", file.name);
	form.append("size", file.size);
	form.append("file", file);

         // отсылаем на сервер
	var XHR = new XMLHttpRequest();
	XHR.open('POST', '/image?toAdd', true);
	XHR.send(form);	
};


код простейший, вроде всё хорошо, браузер сам добавляет заголовки и уходит всё это на сервер.
Теперь принимающий код (тоже упрощенный).
// запрос дошел до адресата и код пришел в виде обьектов Buffer по 63кб кажется
var fullbody = "";
request.on('data', function (chunk) {
	fullbody += chunk; // склеиваем его в один
});
request.on('end', function () {
	var decodedBody = querystring.parse(fullbody); // пробуем распарсить	
});

и облом, не парсится, точнее парсится, но получается обьект
{
 null : "error while processing request '{_request}' (exception: {_exception})"
}


Ну и собственно вопрос, а как правильно распарсить то ? Код упрощен уже, дальше некуда, в чем трабла - не могу понять. И да, я пишу без Expressa и сторонних модулей, хотелось бы решить и понять проблему.
Спасибо.
  • Вопрос задан
  • 5763 просмотра
Решения вопроса 1
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Когда парсать MIME, а это формат не простой, то не будет в том греха, есливозьмете модуль https://www.npmjs.com/package/multiparty и будете его применять, только если content-type точно содержит MIME
var contentType = req.headers['content-type'];
if (contentType && contentType.indexOf('multipart') === 0) {
  var form = multiparty.Form();
  form.parse(req, function(err, fields, files) {
    if (!err) {
      // тут имеем files
    }
  });
}

Благословенны пишущие без Expressa
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы