form数据对象对于html表单发布请求是空的

我试图使用formdata对象发送表单数据到我的服务器。 我需要这个,因为我的input字段之一是一个文件。 然而,当我尝试将数据发送到我的服务器时,formdata对象是空白的,它也打印出“{}”。 有什么问题? 我有jquery更新到11.1支持formdata。 谢谢。

<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

你如何parsing节点服务器上POST请求的主体?

问题是FormData会将内容types设置为multipart/form-data ,这是Express的body-parser不理解的。

注意这里的评论:

[body-parser]不处理多部分物体,因为它们很复杂,而且性质通常很大。 对于多部分机构,您可能会对以下模块感兴趣: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'); } }