表单提交后,如果没有页面重新加载,则不会显示新数据

时间:2014-01-29 17:39:39

标签: node.js express mongoose

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

在'get'页面上,它通过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);}
    }
  );
}

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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