我试图找到以下解决方案但对初学者来说似乎并不明显。我正在使用backbone
和express
整合表单上传。表单由用户信息和文件上载组成。我们的想法是上传文件并将用户模型持久化到具有引用文件的字段的数据库。
使用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
严格要求,否则我希望尽量减少使用插件。
答案 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.files
和user profile
使用了两种不同的模型。我首先同步文件模型,然后使用成功回调来同步files
模型。