我的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;
启动应用程序时效果很好。但是,如果我随后成功向成员表添加一行并重新加载页面,则计数不会更改。这似乎不是缓存问题,因为删除我的缓存并没有解决它。当我重新启动服务器时,我得到了新的计数,但不能指望在每次数据库更改时重新启动服务器。
您只在全局范围内获取一次总记录,因此它只会在启动时执行一次。您应该调用查询并在每次 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;