删除带快递的猫鼬条目

时间:2015-01-08 20:51:39

标签: node.js express mongoose mean-stack

我是整个平均堆栈的新手。我即将创建一个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);

2 个答案:

答案 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的答案之后,这是我的结果,应该有所帮助:

<强>控制器: 你的控制器部分还可以:

&#13;
&#13;
$scope.deleteArticle = function(article) {
  articlesFactory.removeArticle(article) }
&#13;
&#13;
&#13;

出厂设置:您应该使用 DELETE 而不是 PUT
它对我有用,具有以下功能:

&#13;
&#13;
router.delete('/articles/:article/remove', function(req, res, next) {
  req.article.remove(function(err) {
    if (err) {
      return next(err);
    }
    return res.sendStatus(204);
  });
});
&#13;
&#13;
&#13;

型号:对我来说,它没有提供&#34;删除&#34;模型中的函数(显然有一个默认函数),所以从您的代码中删除以下代码段:

&#13;
&#13;
ArticleSchema.methods.remove = function(callback) {
  this.remove(callback);
&#13;
&#13;
&#13;