繁体   English   中英

在Node.js中,如何以不同的频率更新页面的不同组件?

[英]In Node.js, how to update different components of a page in different frequency?

我正在尝试建立一个实时网页以显示一些实时统计信息。 该网页包含12个组成部分。 我在SetTimeout中使用Ajax更新每个组件。 由于我想以不同的频率更新每个组件,因此我为每个组件编写了一个setTimeout函数,并为每个组件提供了一个链接(在“ main.js”中定义)。 看起来像:

(function poll() {
 setTimeout(function() {
  $.ajax({

    url: url1,
    type: 'GET',
    success : function(info){
      var object = document.getElementById("1");
      object.textContent = info;

    }, complete: poll });
  }, 5000);
})();

   ...
   ...

(function poll() {
 setTimeout(function() {
  $.ajax({

    url: url12,
    type: 'GET',
    success : function(info){
      var object = document.getElementById("12");
      object.textContent = info;

    }, complete: poll });
  }, 10000);
})();   

我希望在“ server.js”中仅连接一次数据库,然后呈现不同的组件。 数据库的配置将依赖于链接,因此我按以下方式组织应用程序:

app.get('/:A/:B', function(req,res){

    var A= req.params.A;
    var B = req.params.B;
    var config = something relies on A and B

    var client = new pg.Client(config);

    client.connect(function(err){
      if (err) {
       console.log("Error occurred when try to connect the database",err);
    }
      else {
       res.sendFile(__dirname + '/public/main.html');

       app.get('/main.js', function(req,res){
         res.sendFile(__dirname + '/public/main.js');
       });

       app.get('/url1',function(req,res) {
         //query database and send the data url1 needs
       });

       ...
       ...
       app.get('/url12',function(req,res) {
         //query database and send the data url12 needs
       });


    })

我想问一下像上面的代码那样在“ app.get()”中编写“ app.get()”是否是一种好习惯。 如果没有,如何保持与数据库的全局连接并将其用于不同的组件? 另外,我可以对此Web应用程序进行任何改进吗? 我对Node.js很陌生

如果我必须使用回调而不是promise进行此操作,这就是我在服务器端执行此操作的方式。

首先,我将使用您的端点来获取客户端,但是将其放入模块内部变量中,并且如果我无法连接到数据库,仍然会发送响应。

var db=null;
app.get('/:A/:B', function(req,res){

var A= req.params.A;
var B = req.params.B;
var config = something relies on A and B

var client = new pg.Client(config);

client.connect(function(err){
  if (err) {
   console.log("Error occurred when try to connect the database",err);
   res.status(503).send("Error connecting to database);
  }
  else {
   db = client;
   res.sendFile(__dirname + '/public/main.html');
  }
}
}

然后,我将编写一个可以重用该数据库(如果存在)的函数:

function usingDatabase(req,res,next){
    if(db) {
       req.db=db;
       next();
    }
    else {
       res.status(400).send("Bad request. open the DB first by calling /:A/:B");
    }
}

最终我会像这样使用它:app.get('/ main.js',function(req,res){res.sendFile(__ dirname +'/public/main.js');});

   app.get('/url1',usingDatabase, function(req,res) {
     // db is in req.db;
     //query database and send the data url1 needs
   });

   ...
   ...
   app.get('/url12',usingDatabase,function(req,res) {
     // db is in req.db;
     //query database and send the data url12 needs
   });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM