如何使用backbone和express集成文件上传和模型持久性

时间:2014-04-02 08:43:26

标签: node.js backbone.js file-upload

我试图找到以下解决方案但对初学者来说似乎并不明显。我正在使用backboneexpress整合表单上传。表单由用户信息和文件上载组成。我们的想法是上传文件并将用户模型持久化到具有引用文件的字段的数据库。

使用express上传文件可以轻松实现,通过POST使用正确的HTML标记(<form method='post' action='/upload' enctype='multipart/form-data'>)发送表单,并在{{3}中完成类似的简单处理程序}。

但是,在我的情况下,我使用backbone视图来处理提交事件,并使用save()来保留模型,使POST表达:

submit: function(e){

  e.preventDefault();
  var formData = {};
  console.log("submit form");
  // read form...
  $('.form-group').children('input').each(function(i,el){
     if( $( el ).val() != '' )
       { 
           formData[ el.id ] = $( el ).val();
       }
  });

this.user = new User();
this.user.save(formData);

}  

作为POST处理程序的简化版...

var app = express();

app.post( '/api/users', function( request, response) {
  var user = new UserModel({
     name: request.body.name,
     email: request.body.email,
     file: request.body.file
  });

  user.save( function( err ) {
        if( !err ) {
            return console.log( 'created' );
        } else {
            return console.log( err );
        }
        return response.send( user );
  });
}

关于如何处理文件上传的任何想法可能在模型持久性之前,之后或期间? 除非使用node.js严格要求,否则我希望尽量减少使用插件。

1 个答案:

答案 0 :(得分:2)

我在以下博文中找到了自己的答案:http://estebanpastorino.com/2013/09/27/simple-file-uploads-with-backbone-dot-js/。解决方案包括使用iframe技巧将文件对象传递给服务器,并且可以使用名为jquery的{​​{1}}插件轻松实现。

此jquery插件使jquery.iframe-transport属性中的服务器上的文件对象可用,可用于读取/写入文件,如http://shivalibari.com/blog/2014/02/file-upload-using-node/中所述。

在我的实现中,我最终为request.filesuser profile使用了两种不同的模型。我首先同步文件模型,然后使用成功回调来同步files模型。