API删除function不工作了,不会从数组中删除任何东西?

当我尝试从视图中删除一个post显然表明它被删除。 但是,当我回到供应商路线我可以通过下面的路线find所有以前的数组成员。 但是,当我在/职位的路线不显示我以前删除的成员。 有趣的是,刷新页面后,它不再显示我在我的视图上的logging。 在下面的路线,后消失,而我从命令提示符下尝试:

/供应商/ 553b72c9f6d0020425d37f37 /职位

router.get('/providers/:provider/posts', function(req, res) { Provider.findById(req.params.provider).select('posts').populate('posts').exec(function(err, provider) { if(err){ return next(err); } res.json(provider.posts); }); }); 

然而,在这条路线,我可以find与9名成员的职位数组。 看来,任何删除不起作用。

 router.get('/providers', function(req, res, next) { Provider.find(function(err, providers){ if(err){ return next(err); } res.json(providers); }); }); 

这是我在服务器端的删除function:

 router.delete('/providers/:provider/posts/:post',auth, function(req, res){ console.log("I ma running from server") return Post.findById(req.params.post, function(err, post){ return post.remove(function(err){ if(!err){ Post.update({_id: post.provider}, {$pull : {posts : post._id}}, function(err, numberAffected){ console.log(numberAffected); if(!err){ return console.log('removed post id'); } else { return console.log(err); } }); console.log('post removed'); return res.send(''); } else{ console.log(err); } }); }); }); 

在这里,我在我的客户端工厂里面有:

  ob.deletePost = function (provider_id,post_id) { return $http.delete(urlBase +'/providers/' + provider_id +'/posts/' + post_id , { headers: {Authorization: 'Bearer '+auth.getToken()} }); }; 

在控制器中:

 $scope.deletePost= function (provider_id,post_id) { //console.log('PROVIDER',provider_id); // console.log('POST',post_id); // console.log('COMMENT',comment_id); providers.deletePost(provider_id,post_id) .success(function () { $scope.status = 'Deleted Post! Refreshing post list.'; for (var i = 0; i < $scope.provider.posts.length; i++) { var post = $scope.provider.posts[i]; // console.log(i,comment,comment_id) //console.log(comment.ID); if (post._id === post_id) { //console.log(provider._id === provider_id) // console.log(provider._id); $scope.provider.posts.splice(i, 1); //providers.getAllComments(); break; } } // $scope.providers = null; // i am not sure how to write for comment as well? }) .error(function (error) { $scope.status = 'Unable to delete comment: ' + error.message; }); }; 

这是我的观点的一部分:

 <div ng-repeat="provider in providers"> <!-- | orderBy:'-upvotes'--> <span class="glyphicon glyphicon-thumbs-up" ng-click="incrementUpvotes(provider)"></span> <span style="font-size:18px; margin-left:10px;"> {{provider.upvotes}} - <strong>{{provider.name}}</strong> <span ng-if="provider.posts.length !== 0"> <a ui-sref="post({provider_id : provider._id})">{{provider.posts.length}} Posts </a> <button class="btn btn-xs btn-info pull-right" ng-click="modalUpdateProvider('size',provider)">Edit</button> </span> 

永远不会provider.posts.length正在更新。 要观看提供者和发布视图,您可以查看以下链接 。 谢谢。

我相信你在更新声明中使用了错误的模型:

 router.delete('/providers/:provider/posts/:post', auth, function(req, res) { console.log("I ma running from server"); // NOTE: you could also include a where clause to ensure the // provider ID matches as well. This would prevent someone from using any // provider ID (inclduing one that doesn't exist) with a post ID. return Post.findById(req.params.post, function(err, post) { // Might want to check for an error here console.log('post removed'); return post.remove(function(err) { if (!err) { //Post.update({ Provider.update({ _id: post.provider // or req.params.provider }, { $pull: { posts: post._id } }, function(err, numberAffected) { console.log(numberAffected); if (!err) { console.log('removed post id'); } else { console.log(err); } return res.send(''); }); } else { console.log(err); } }); }); }); 

另外,您可以使用findByIdAndXXX方法以及内置的promise来将它们链接在一起,以便于阅读:

 router.delete('/providers/:provider/posts/:post', auth, function(req, res) { console.log("I ma running from server"); // NOTE: you could also include a where clause to ensure the // provider ID matches as well. This would prevent someone from using any // provider ID (inclduing one that doesn't exist) with a post ID. return Post.findByIdAndRemove(req.params.post).exec().then(function(post) { console.log('post removed'); return Provider.findByIdAndUpdate(req.params.provider, { $pull: { posts: post._id } }, { new: true } // Return updated document ).exec(); // return promise to be evaluated for next handler }).then(function(provider) { console.log('removed post id'); res.send(''); }).then(null, function(err) { console.log(err); //might want to send a response error here }); }); 

更新:要使用where子句,您将需要切换到findOneAndXXX方法:

 router.delete('/providers/:provider/posts/:post', auth, function(req, res) { console.log("I am running from server"); return Post.findOneAndRemove({_id: req.params.post, provider_id: req.params.provider}).exec().then(function(post) { console.log('post removed'); return Provider.findByIdAndUpdate(req.params.provider, { $pull: { posts: post._id // or req.params.post } }, { new: true } // Return updated document ).exec(); // return promise to be evaluated for next handler }).then(function(provider) { console.log('removed post id'); res.send(''); }).then(null, function(err) { console.log(err); //might want to send a response error here }); });