如何等待推送mongoose列表项?

时间:2018-05-21 18:43:38

标签: node.js mongodb mongoose

我有一条Express路由,当用户点击向线程提交新评论时会触发该路由。该路由通过将新注释推送到mongoose对象中的列表末尾然后将用户重定向回他们来自的页面来处理此问题。这应该向他们显示所有评论的列表,包括他们刚刚添加的评论,但事实并非如此。相反,它显示未修改的列表。需要重新加载才能显示他们刚添加的评论。

有问题的功能如下:

router.post('/get/:faultId/new_comment', function(req, res, next) {
  var commenter = req.body.first_name + " " + req.body.last_name;
  var comment = req.body.new_comment_text
  var datetime = Date.now();

  var comment_object = commentCreate(commenter, comment, datetime);

  FaultReport
    .findOne({
      '_id': req.params.faultId
    })
    .exec(function(err, report) {
      if (err) return console.error(err);
      report.comment.push(comment_object);
      report.save();
    });

  res.redirect('/api/get/' + req.params.faultId);
});

我显然误解了一些事情。在重定向用户之前,如何等待数据库更新?

1 个答案:

答案 0 :(得分:0)

将回调传递给report.save并从那里拨打res.redirect

router.post('/get/:faultId/new_comment', function(req, res, next) {
  var commenter = req.body.first_name + " " + req.body.last_name;
  var comment = req.body.new_comment_text
  var datetime = Date.now();

  var comment_object = commentCreate(commenter, comment, datetime);

  FaultReport
    .findOne({
      '_id': req.params.faultId
    })
    .exec(function(err, report) {
      if (err) return console.error(err);
      report.comment.push(comment_object);
      report.save(function(err) {
        res.redirect('/api/get/' + req.params.faultId);
      });
    });
});