猿问

有条件地将 EJS 模板视图渲染到相同的路径

所以,非常新手的问题,但我搜索了几个小时并找不到这个特定的问题(我知道我在做一些愚蠢的事情)。


我正在从一个简单的 sqlite 数据库表中获取数据,处理某些行是否是特定值,将它们推送到一个表中(我用它来推送到一个 EJS 页面),然后想要根据是否存在来呈现一个页面表中是否有任何数据。


我想以一定的时间间隔(使用 setInterval)读取表格,然后如果发生更改,请更新“视图”。


除了 EJS 页面实际上必须从一个页面切换到另一个页面时,所有这些都进展顺利。我什至不确定是否可以在渲染后执行此操作。但是,我更愿意在浏览器刷新时更改的同一路径('/')上呈现不同的页面。


初始条件语句呈现正确的 EJS 页面,但正如我所说,一旦需要切换,页面将保持在浏览器刷新状态。


我试过在多个位置(在“get”内部、外部等)移动条件的位置。


还尝试在单个 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。在这段代码中,我可以在 DB 更改时适当地记录“true”和“false”,但是一旦总体函数运行一次,渲染就不会更改。


对不起,如果它很难阅读,但它让我一整天都发疯了。


繁花不似锦
浏览 165回答 1
1回答
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答