Express JS 和数据库的重新加载问题

问题描述 投票:0回答:1

我的index.js看起来像这样:

var express = require('express');
var router = express.Router();

const pg = require('pg-promise')(/* options */);
const db = pg('postgres://postgres:postgres@localhost:5432/test');

var memberCount = 0;
db.one('SELECT COUNT(*) from member')
  .then((data) => {
    memberCount = data.count;
  })
  .catch((error) => {
    console.log('ERROR:', error);
  });

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'MyTitle', users: memberCount });
});

module.exports = router;

启动应用程序时效果很好。但是,如果我随后成功向成员表添加一行并重新加载页面,则计数不会更改。这似乎不是缓存问题,因为删除我的缓存并没有解决它。当我重新启动服务器时,我得到了新的计数,但不能指望在每次数据库更改时重新启动服务器。

node.js postgresql express count page-refresh
1个回答
0
投票

您只在全局范围内获取一次总记录,因此它只会在启动时执行一次。您应该调用查询并在每次 API 调用时返回更新的结果。

请参阅下面的代码以获得更清晰的信息。此外,就代码质量而言,它可能不是最佳代码,但它将帮助您了解您的问题以及需要哪种方法来解决它。

var express = require("express");
var router = express.Router();

const pg = require("pg-promise")(/* options */);
const db = pg("postgres://postgres:postgres@localhost:5432/test");

const getTotalUsers = async () => {
  try {
    const { count } = await db.one("SELECT COUNT(*) from member");

    return count;
  } catch (error) {
    console.log("ERROR:", error);
  }
};

/* GET home page. */
router.get("/", async function (req, res, next) {
  const users = await getTotalUsers();

  res.render("index", { title: "MyTitle", users: users || 0 });
});

module.exports = router;
© www.soinside.com 2019 - 2024. All rights reserved.