2015-07-08 4 views
2

Я пытаюсь использовать объект formdata для отправки данных формы на мой сервер. Мне нужно это, потому что одно из моих полей ввода - это файл. Однако объект formdata пуст, когда я пытаюсь отправить данные на свой сервер, он также выводит «{}». В чем проблема? Я обновил jquery до 11.1, который поддерживает formdata. Благодарю.formdata объект пуст для html формы post request

<form enctype="multipart/form-data" name="formName" id="formId"> 
    <input type="text" name="name" class="form-control" id="name"> 
    </form> 
    <button type="submit" class="btn btn-xl sub">Send Message</button> 

    <script> 
     $(".sub").click(function(){ 
     var formElement = document.querySelector("form"); 
     alert(formElement); //alert message is "[object HTMLFormElement]" 
     var d = new FormData(formElement); 
     alert(JSON.stringify(d)); //alert message is "{}" 
     $.post("/email",d,function(data){ 
      alert("success!"); 
     }); 
     }); 
    </script> 

Сервер:

/*never reaches endpoint*/ 
app.post('/email', function(req, res) { 
    console.log("entered"); 
    console.log(req.body) // form fields 
    console.log(req.files) // form files 
    var resume = req.files; 
    email(req.body, resume); 
}); 

https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects

+1

это пустой объект, это то, что он выглядит как строка. в стороне: он будет выглядеть так же, как JSON.stringify(), даже если он заполнен ... – dandavis

+0

Мне интересно, почему это пустой объект. Я не могу отправить заполненную форму своим почтовым запросом. Его пустой клиент, и он никогда не делает его сервером. Что-то не замечает моего запроса? –

+1

хорошо, ну что такое '$ .post'? – dandavis

ответ

0

Как вы разбора тела запросов POST на сервере узла?

Вопрос заключается в том, что FormData установит тип контента multipart/form-data, который Express 'body-parser не понимает.

Примечание комментарий here:

[тело-анализатор] не обрабатывает многокомпонентные тела, из-за их сложной и, как правило, большой характер. Для многочастных тел вас могут заинтересовать следующие модули: busboy и connect-busboy; многопартийность и многосвязность; превосходно; multer.

Другими словами, вы должны использовать другой модуль для обработки многочастного тела, отправляемого FormData. Я могу рекомендовать formidable, в этом случае вы находитесь код сервера будет выглядеть примерно так:

const formidable = require('formidable') 

exports.createPost = (req, res, next) => { 
    var form = new formidable.IncomingForm(); 
    form.parse(req, (err, fields, files) => { 
     console.log(fields) 
     res.send('NOT IMPLEMENTED: pollsController createPost'); 
    } 
}