[英]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.