【问题标题】:remove a mongoose entry with express使用 express 删除 mongoose 条目
【发布时间】:2015-03-07 02:35:31
【问题描述】:

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

【问题讨论】:

  • 显然他要去 D.
  • @FabioPoloni 不要……喂……巨魔,必须抵抗

标签: node.js express mongoose mean-stack


【解决方案1】:

应该使用HTTP的delete方法。试试这个逻辑,它来自 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')
};

【讨论】:

  • 我构建的一切仍然有效,但是当我单击删除时,我现在收到此错误ArticleSchema.methods.remove = function(callback) { ^ RangeError: Maximum call stack size exceeded npm ERR! weird error 8 npm WARN This failure might be due to the use of legacy binary "node" npm WARN For further explanations, please read /usr/share/doc/nodejs/README.Debian npm ERR! not ok code 0
【解决方案2】:

我知道这是一篇旧帖子,但我偶然发现了它,因为我遇到了同样的问题,所以也许它对某人有用。

在尝试了您的代码并使用了 TommyMac 的一些答案后,这是我的结果,应该会有所帮助:

控制器: 你的控制器部分没问题:

$scope.deleteArticle = function(article) {
  articlesFactory.removeArticle(article) }

工厂:您应该使用 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);
  });
});

模型:对我来说,它没有在模型上提供“删除”功能(显然有一个默认功能),所以删除以下sn-p来自您的代码:

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

【讨论】:

    猜你喜欢
    • 2017-05-16
    • 2023-03-25
    • 1970-01-01
    • 2017-08-04
    • 2013-08-27
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多