簡體   English   中英

提交表單后,不重新加載頁面就不會顯示新數據

[英]After form submission, new data does not appear without page reload

在我的ExpressJS應用中,我有兩條到達同一位置的路線,一條到達“ get”,一條到達“ post”。

在“獲取”頁面上,它通過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);}
    }
  );
}

好的,我似乎在回調中又一次犯了這個錯誤。 我解決了這個問題。

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

是的,那些數據庫查詢是異步的,因此回調將解決此問題。 但是,您應該研究使用諾言。 貓鼬默認會返回promise,或者您可以導入選擇的庫。 在處理嵌套的回調和查詢以及錯誤處理時,它們將派上用場。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM