![](/img/trans.png)
[英]How to run a different SQL function when changing to a different page/component in Node.js (React)?
[英]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.