gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:25:21 25 4
gpt4 key购买 nike

我正在尝试构建一个实时网页来显示一些实时统计数据。该网页有 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()”是否是一个好的做法。如果没有,我如何保持与数据库的全局连接并将其用于不同的组件?另外,我可以对这个网络应用程序进行任何改进吗?我对 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', 函数(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
});

关于javascript - 在Node.js中,如何以不同的频率更新页面的不同组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38680979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com