繁体   English   中英

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

[英]formdata object is empty for html form post request

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

  <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

您如何在节点服务器上解析POST请求的正文?

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

注意这里的评论:

[body-parser]由于其复杂且通常较大的性质,因此无法处理多部分实体。 对于多部分实体,您可能对以下模块感兴趣:busboy和connect-busboy; 多方和连接多方; 强大; multer。

因此,换句话说,您必须使用其他模块来处理FormData发送的多部分主体。 我可以建议a 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');
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM