You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 11:22:52