所以,这是一个非常新手的问题,但是我搜索了几个小时,却找不到这个特定的问题(我知道我在做一些愚蠢的事情)。
我正在从简单的sqlite数据库表中获取数据,处理某些行是否为特定值,将它们推入表(我用来将其推入EJS页面之一),然后希望基于表中是否有数据。
我想以一定间隔(使用setInterval)读取表,然后如果有更改,请更新“视图”。
除了EJS页面实际上必须从一个页面切换到另一页面之外,其他所有功能都运行良好。渲染完成后,我什至不确定是否可以执行此操作。但是,我宁愿仅在同一路径('/')上呈现不同的页面,该页面在浏览器刷新时会更改。
初始条件语句呈现正确的EJS页面,但是就像我说的那样,一旦需要切换,该页面将保持在浏览器刷新状态。
我尝试将条件的放置位置移动到多个位置(在“获取”内部,外部等等)。
还尝试在单个EJS页面中执行“ if”语句,但是一旦呈现初始页面然后使用setInterval再次调用该函数,它就不会刷新。
var sqlite3 = require('sqlite3').verbose();
var express = require('express');
var app = express();
fs = require('fs')
app.set('view engine', 'ejs');
function query(){
var db = new sqlite3.Database('./my_database.sqlite', sqlite3.OPEN_READWRITE, (err) => {
if (err) {
console.error(err.message);
}
console.log('Connected to the chinook database.');
});
var sql = `SELECT column1 column1
FROM myTable
WHERE column1 = ?`;
var mkts = []
db.each(sql, ['a'], (err, row) => {
if (err) {
throw err;
}
mkts.push(row.column1);
console.log(mkts);
});
db.close((err) => {
if (err) {
return console.error(err.message);
}
console.log('Close the database connection.');
console.log(mkts.length);
if(mkts.length>0){
console.log(true);
app.get('/', function(req, res){
res.render('alert', {mkts:mkts});
});
}else{
console.log(false);
app.get('/', function(req, res){
res.render('index', {mkts:mkts});
});
}
});
};
query();
setInterval(() => query(), 10000);
app.listen(3000);
因此,基本上在打开然后查询所需的数据之后,我在db.close上运行get和render。在这段代码中,当数据库发生更改时,我可以使“ true”和“ false”正确记录下来,但是一旦运行了总体功能,渲染就不会更改。
很抱歉,如果它很难阅读,但是整天让我发疯。
答案 0 :(得分:0)
您的逻辑(检索数据,视图开关)必须位于您的app.get(“ /” ... 在这里,您仅查询一次数据(在服务器上),并使用静态数据设置静态路由。
尝试这样的事情:
// connect to db on startup
var db = new sqlite3.Database('./my_database.sqlite', sqlite3.OPEN_READWRITE, (err) => {
if (err) {
console.error(err.message);
}
console.log('Connected to the chinook database.');
});
// define your routes
app.get('/', function(req, res){
// when route is asked by your browser retrieve the datas
var sql = `SELECT column1 column1
FROM myTable
WHERE column1 = ?`;
var mkts = []
db.each(sql, ['a'], (err, row) => {
if (err) {
throw err;
}
mkts.push(row.column1);
console.log(mkts);
});
// render the good view according to your datas
if(mkts.length>0){
res.render('alert', {mkts:mkts});
}
else {
res.render('index', {mkts:mkts});
}
});
app.listen(3000);
此外,您无法在此处完成刷新视图的setInterval,客户端必须询问“刷新”。在您看来,只需在javacript中添加如下内容:
<script>setTimeout(function(){document.location.reload();}, 1000);</script>