Express JS数据库重载问题:新增数据后页面计数不刷新
问题解决:页面无法实时更新数据库用户计数
问题现象
应用启动后运行正常,但向member表添加数据后,刷新页面无法看到更新后的计数,只有重启服务器才能获取最新数值。
根因分析
你的代码在服务器初始化阶段仅执行了一次SELECT COUNT(*) from member查询,将结果赋值给memberCount变量。之后所有的页面请求都会直接复用这个初始值,不会重新触发数据库查询,所以数据库变更后页面无法实时更新。
解决方案
将数据库计数查询逻辑移到GET /请求的处理函数内部,确保每次用户访问页面时,都重新从数据库获取最新的用户数量。
修正后的代码
var express = require('express'); var router = express.Router(); const pg = require('pg-promise')(/* options */); const db = pg('postgres://postgres:postgres@localhost:5432/test'); /* GET home page. */ router.get('/', async function(req, res, next) { try { const data = await db.one('SELECT COUNT(*) from member'); res.render('index', { title: 'MyTitle', users: data.count }); } catch (error) { console.log('ERROR:', error); next(error); // 将错误传递给Express错误处理中间件 } }); module.exports = router;
补充说明
- 也可以继续使用
.then/.catch的异步写法:
router.get('/', function(req, res, next) { db.one('SELECT COUNT(*) from member') .then((data) => { res.render('index', { title: 'MyTitle', users: data.count }); }) .catch((error) => { console.log('ERROR:', error); next(error); }); });
- 如果后续出现高并发场景下的性能问题,可以考虑引入缓存机制(如Redis),或者通过数据库触发器主动更新缓存,但对于大多数中小规模场景,直接每次请求查询数据库已经足够高效。
内容的提问来源于stack exchange,提问作者SK19
相关产品推荐
相关产品推荐

