【问题标题】:How to wait for mongoose list item to be pushed?如何等待猫鼬列表项被推送?
【发布时间】:2018-10-31 11:09:23
【问题描述】:

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

有问题的函数如下:

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);
});

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

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    将回调传递给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);
          });
        });
    });
    

    【讨论】:

    • 完美。谢谢!
    猜你喜欢
    • 2018-11-29
    • 2019-05-10
    • 2018-08-30
    • 2019-03-20
    • 2016-11-19
    • 2022-12-22
    • 2014-03-03
    • 2020-10-16
    • 1970-01-01
    相关资源
    最近更新 更多