Итак, очень новый вопрос, но я искал пару часов и не смог найти эту конкретную проблему (я знаю, что делаю что-то глупое).
Я собираю данные из простой базы данных sqliteтаблица, обрабатывая, если определенные строки имеют определенное значение, помещая их в таблицу (которую я использую для перемещения на одну из страниц EJS), а затем хочу отобразить страницу, основываясь на том, есть ли какие-либо данные в таблице или нет.
Я хочу прочитать таблицу через определенный интервал (используя setInterval), а затем, если произошли изменения, обновить «представление».
Все это прошло хорошо, за исключениемкогда страница EJS действительно должна переключаться с одной страницы на другую.Я даже не уверен, возможно ли это сделать, как только оно будет отображено.Но я бы предпочел просто отобразить другую страницу по тому же пути ('/'), которая изменяется при обновлении браузера.
Первоначальный условный оператор отображает правильную страницу EJS, но, как я уже сказал, когда-тоНужно переключиться, страница остается на обновлении браузера.
Я попытался переместить размещение условия в нескольких местах (внутри "get", снаружи и т. Д.).
Также попытался выполнить оператор "if" внутри одного EJSстраница, но она не будет обновляться после рендеринга начальной страницы, а затем функция вызывается снова с помощью 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);
Итак, после открытия и запроса нужных мне данных, язапустив get и render в db.close.В этом коде я могу получить «true» и «false» для записи в журнал соответствующим образом при изменении БД, но рендер не изменится, если однажды будет выполнена всеобъемлющая функция.
Извините, если трудно прочитать,но это сводило меня с ума весь день.