jquery AJAX将formdata发布到节点,结果为空req.body

时间:2015-08-13 13:57:21

标签: javascript jquery ajax node.js express

我正在尝试将数据发布到我的节点服务器。 数据收集在以下HTML

<label for="files" class="col-md-4 control-label">Files</label>
<div class="col-md-7">
    <input type="file" id="files" name="files[]" multiple="multiple">
</div>
<label for="name" class="col-md-4 control-label">Name</label>
<div class="col-md-7">
    <input id="name" name="name" class="form-control" type="text">
</div>
<label for="url" class="col-md-4 control-label">Landing Page</label>
<div class="col-md-7">
    <input id="url" name="name" class="form-control" type="text">
</div>
<button type="button" id="add_files" class="btn btn-primary" style="background-color:#27AE60;">Add Files</button>

点击事件被jquery捕获,并发出ajax帖子

$('#add_files').on('click', function () {
    var files = $("#files")[0].files;
    var name = $("#name").val();
    var url = $("#url").val();
    var formData = new FormData();
    formData.append("name", name);
    formData.append("url", url);
    $.each($('#files')[0].files, function (i, file) {
        formData.append('file-' + i, file);
    });
    $.ajax({
        url: '/newData',
        type: 'POST',
        data: formData, // The form with the file inputs.
        processData: false, // Using FormData, no need to process data.
        contentType: false
    }).done(function () {
        console.log("Success: Files sent!");
    }).fail(function () {
        console.log("An error occurred, the files couldn't be sent!");
    });
});

然后我的节点服务器捕获了帖子,但是req.boy是空的

app.post('/newData',function(req,res){
    console.log("req body ",req.body)
    console.log("req body ",req.body.data)
})

产生以下结果:

req body  {}
req body  undefined

任何想法出了什么问题?

我的实施基于以下内容: https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects How can I upload files asynchronously?

2 个答案:

答案 0 :(得分:1)

有更简单的方法来完成这项工作,你是手动尝试,而我建议使用模块来处理表单和文件上传而不需要太多努力,我可以推荐Formidable

答案 1 :(得分:-1)

使用bodyparser e.g

var bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended : true

}));

和 而不是

req.body

使用

req.body.name or
req.body.url