我是整个平均堆栈的新手。我即将创建一个CRUD应用程序。我已经有了简单的,C和R,但现在我想去D.不幸的是,当我尝试删除一个条目时,我得到500错误。我的路线被调用,但之后没有任何事情发生。
HTML
<div ng-repeat="article in articles">
<form ng-click="deleteArticle(article)">
<button type="submit" class="btn btn-primary">Delete</button>
</form>
</div>
角
我控制器中的部分..
$scope.deleteArticle = function(article) {
articlesFactory.removeArticle(article) }
在工厂中被调用的部分:
art.removeArticle = function(article) {
return $http.put('/articles/' + article._id + '/remove')
};
路线
...
router.param('article', function(req, res, next, id) {
var query = Article.findById(id);
query.exec(function (err, article) {
if (err) { return next(err); }
if (!article) { return next(new Error("Unable to find this article.")); }
req.article = article;
return next();
});
});
...
router.put('/articles/:article/remove', function(req, res, next) {
console.log("I arrived in the routes")
req.article.remove(function(err, article) {
if (err) { return next(err); }
res.json(article);
});
});
...
模型
var ArticleSchema = new mongoose.Schema({
title: String,
content: String,
likes: { type: Number, default: 0 },
comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }]
});
ArticleSchema.methods.remove = function(callback) {
this.remove(callback);
答案 0 :(得分:1)
应该使用HTTP的删除方法。尝试这个逻辑,它来自angular-fullstack控制器模板(我建议使用它创建自己的端点,here's the link):
router.delete('/articles/:id/remove', function(req, res, next) {
Article.findById(req.params.id, function (err, article) {
if(err) { return next(err); }
if(!article) { return res.send(404); }
article.remove(function(err) {
if(err) { return handleError(res, err); }
return res.send(204);
});
});
});
您还需要更新此项以使用删除:
art.removeArticle = function(article) {
return $http.delete('/articles/' + article._id + '/remove')
};
答案 1 :(得分:0)
我知道这是一个老帖子,但我偶然发现它,因为我有同样的问题,所以也许这对某人有用。
在尝试完代码并使用TommyMac的答案之后,这是我的结果,应该有所帮助:
<强>控制器强>: 你的控制器部分还可以:
$scope.deleteArticle = function(article) {
articlesFactory.removeArticle(article) }
&#13;
出厂设置:您应该使用 DELETE 而不是 PUT
它对我有用,具有以下功能:
router.delete('/articles/:article/remove', function(req, res, next) {
req.article.remove(function(err) {
if (err) {
return next(err);
}
return res.sendStatus(204);
});
});
&#13;
型号:对我来说,它没有提供&#34;删除&#34;模型中的函数(显然有一个默认函数),所以从您的代码中删除以下代码段:
ArticleSchema.methods.remove = function(callback) {
this.remove(callback);
&#13;