2015-09-26 54 views
0

我有以下服务(除去变量):

angular 
    .module('app') 
    .factory('Employee', function($resource) { 
     return $resource("https://api.mongolab.com/api/1/databases/:dbName/collections/:collectionName/:id", 
     {apiKey: apiKey, dbName: dbName, collectionName: collectionName}, 
     { update: { method: 'PUT' } }); 
}); 

我在我的添加/编辑表单控件下面的代码创建/检索雇员:现在

if($stateParams.id === "add") { 
    $scope.employee = new Employee(); 
} else { 
    $scope.employee = Employee.get({id: $stateParams.id}); 
} 

,我的形式我有一个Save按钮附加了如下功能:

if($scope.employee._id) { 
    $scope.employee.$update({id:$scope.employee._id}); 
} else { 
    $scope.employee._id = $scope.employee.jmbg; 
    $scope.employee.$save(); 
} 

“添加”功能工作正常,但是当我更新现有的员工,我得到以下错误:

400 Bad Request - Invalid object { "_id" : "000" , "jmbg" : "000" , "name" : "Bilbo" , "surname" : "Hagins" , "email" : "[email protected]" , "$promise" : { } , "$resolved" : true} - Document field names can't start with '$' (Bad Key: '$promise') 

现在,我$scope.employee确实含有这两个领域,但是这是我第一次遇到这样的错误,我已经在其他项目上有这个功能(即使是在后端使用相同的MongoLab API,并且据我所知,这个项目和这个项目的代码没有任何区别) 。

另请注意,在我的角度应用程序中没有任何配置。

+1

也许你在混合Angular和Angular Resource的版本。在1.3之前,所有以'$'开头的属性都没有被Angular发送到服务器。现在资源服务必须自己删除这些属性。 – zeroflagL

+0

可能是你缺少params中ID {apiKey:apiKey,DBNAME:数据库名,集合名:集合名},以$更新更新记录 –

+0

@zeroflagL就是这样,我有角资源1.2.x的,而不是当需要ID 1.4.x的... – user2352164

回答

0

当执行PUT请求,angularjs自动添加$promise,和$resolved

因此,在终点,你应该确保删除这些属性,

像下面的例子中,使用快递的路由器。

router.route('/contact/:id').put(function(req, res) { var contact = req.body; delete contact.$promise; delete contact.$resolved; // update the database });

但不知道为什么angularjs增加$promise$resolved在PUT请求。