对于html表单发布请求,formdata对象为空

时间:2015-07-08 22:16:20

标签: javascript ajax node.js express form-data

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

Preferences

服务器:

  <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>

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

1 个答案:

答案 0 :(得分:0)

如何在节点服务器上解析POST请求的主体?

问题在于FormData会将内容类型设置为multipart/form-data,而Express {&#39; body-parser无法理解。

请注意评论here

  

[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');
    }
}