【问题标题】:After form submission, new data does not appear without page reload表单提交后,不重新加载页面不会出现新数据
【发布时间】:2014-02-05 04:06:30
【问题描述】:

在我的 ExpressJS 应用程序中,我有两条通往同一位置的路线,一条用于“获取”,一条用于“发布”。

在“获取”页面上,它通过 MongooseJS 转储了我的 MongoDB 集合中的所有文档,然后是一个用于向集合中添加新记录的表单。

在“发布”页面上,它接收表单数据并将其添加到集合中,然后显示您通过“获取”看到的同一页面。

它可以工作,但是在提交表单后,除非我重新加载页面,否则不会出现新记录。我将呈现页面的代码放在最底部,在将数据添加到集合的部分下方,所以在我看来应该可以工作,但它没有。

exports.index = function(req, res){
  Server.find({},
    function(err, docs) {
      if (!err){ 
          res.render('servers', { title: 'verify', results: docs});
      }
      else { console.log(err);}
    }
  );
}

exports.add = function(req, res){
  newServer = new Server({
    name: req.body.name,
    os: req.body.os,
    osVersion: req.body.osVersion
  });
  newServer.save(function (err) {
    if (err) {
      console.log(err);
  }
  });
  Server.find({},
    function(err, docs) {
      if (!err){ 
          res.render('servers', { title: 'verify', results: docs});
      }
      else { console.log(err);}
    }
  );
}

【问题讨论】:

    标签: node.js express mongoose


    【解决方案1】:

    好的,我似乎在回调中再次犯了这个错误。我解决了这个问题。

    exports.add = function(req, res){
      newServer = new Server({
        name: req.body.name,
        os: req.body.os,
        osVersion: req.body.osVersion
      });
      newServer.save(function (err) {
        if (err) {
          console.log(err);
        } else {
          Server.find({},
            function(err, docs) {
              if (!err){ 
                res.render('servers', { title: 'verify', results: docs});
              }
              else { console.log(err);}
          }
         );
        }
      });
    }
    

    【讨论】:

      【解决方案2】:

      是的,那些数据库查询是异步的,所以回调将解决这个问题。但是,您应该考虑使用 Promise。 Mongoose 默认返回 Promise,或者您可以导入您选择的库。在处理嵌套回调和查询以及错误处理时,它们会派上用场。

      【讨论】:

        猜你喜欢
        • 2016-03-28
        • 2017-02-03
        • 2021-11-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多