从Collection.create和普通表单发送时的不同请求内容

时间:2015-10-24 02:19:44

标签: node.js backbone.js multer

我尝试使用Backbone + ReactJS构建文件上传站点,我使用backbone-model-file-upload帮助我在骨干模型中保存文件并保存到mongodb(后端使用nodejs + multer)

但我发现这个模块存在一些问题, 因为我使用一个简单的表格来上传没有主干模型的文件,并使用multer在后端进行处理,并且它工作正常。

所以我更深入地看待我从骨干模型发送的请求中保存(我使用collection.create())并从正常形式发送请求,这是我得到的:

正常形式: enter image description here

backbone-model-file-upload的主干模型: enter image description here

显然,请求有效负载是主干模型中的一个混乱,对吧? 为什么有两个内容配置?并且名称错误,名称应为输入名称,如

有人知道发生了什么吗?

我不确定我是否在正确的位置查找,如果我错了请告诉我,我感谢您的帮助。

谢谢。

1 个答案:

答案 0 :(得分:0)

好吧......经过几个小时的痛苦,我弄清楚发生了什么,实际上很简单......

事实证明,multer({ storage: storageConfig }).single('Input Name')中的 输入名称 应与主干模型的属性(键)相同

例如,如果我的骨干模型看起来像

app.File = Backbone.Model.extend({
    idAttribute : '_id',
    urlRoot: '/db/collections',
    fileAttribute: 'uploadFile',
    defaults: {
        _id: null,
        title: ''
    }   
});

然后,我的傻瓜应该看起来像

`multer({ storage: storageConfig }).single('uploadFile')`

并且当您尝试在集合中创建和保存模型时, 你必须指定相同的属性值

例如:

var file_data = $(".new-file").prop("files")[0];   // Getting the properties of file from file field
        var fileName = $(".new-file").val().split('/').pop().split('\\').pop();
            if (fileName) {
            this.props.files.create({
                title: fileName,
                uploadFile: file_data
            },{ formData: true , wait: true});
            ReactDOM.findDOMNode(this.refs.newField).value = '';
        }

就是这样。

但是我不确定在这个解决方案中获得req.body是否可以。如果我弄明白的话,我会稍后更新。

感谢。