我正在处理一个表单,用户可以在其中更新自己的个人资料数据并更改头像。我的客户端代码如下所示:
$http({
method : 'PUT',
url: '/api/users/'+ userId,
headers: { 'Content-Type': undefined},
transformRequest: function(data){
var fd = new FormData();
fd.append('avatar', data.avatar);
fd.append('user', angular.toJson(data.user));
return fd;
},
data : {user: $scope.userData, avatar: $scope.file}
})
其中$ scope.file是图像文件,$ scope.userData是其他数据。 我使用一个指令将回调绑定到input元素中的'change'动作。
el.bind('change', function(event){
var file = event.target.files[0];
scope.$emit('fileselected', {file: file});
});
在我的控制器中:
$scope.$on('filesselected', function (event, args) {
$scope.$apply(function () {
$scope.getFile(args.file);
$scope.file = args.file;
});
});
底线,没有数据发送到服务器。我在服务器端使用Express和 console.log(req.body)的输出是{}
好的,我刚想通了。问题出在Express body解析器上。我必须手动安装'multiparty'解析器。它现在有效