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

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

本文关键字:频率 组件 更新 js Node      更新时间:2023-09-26

我正在尝试构建一个实时网页来显示一些实时统计信息。此网页包含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.gt()"是否是一种好的做法。如果没有,我如何保持与数据库的全局连接,并将其用于不同的组件?另外,我能对这个网络应用程序做些改进吗?我对Node.js 很陌生

如果我必须用回调而不是promise来做这件事,这就是我在服务器端的做法。

首先,我会使用您的端点来获取客户端,但会将其放在模块内部变量中,如果我未能连接到DB,仍然会发送响应。

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