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

服务器返回旧数据,新增用户不显示,如何获取数据库实时数据?

问题分析与解决方案

你遇到的问题根源在于**getAll模块只在服务器启动时执行了一次数据库查询,之后一直复用缓存的结果**,而不是每次需要用户列表时都去查询最新数据。咱们一步步来修复:

1. 修复getAll模块的查询逻辑

当前你的getAll文件直接导出了一个已经执行过的Promise实例,这意味着服务器启动时就会查询一次用户表,之后所有请求都会用这次的缓存数据。把它改成一个函数,每次调用才触发查询:

// getAll file 修改后
const sqlite3 = require("sqlite3").verbose();
const db = new sqlite3.Database("./db/dbSqlite/app.db");

// 改成函数,每次调用都会重新查询数据库
const getAll = () => {
  return new Promise((res, rej) => {
    db.all(`SELECT * from users`, (err, rows) => {
      if (err || !rows) {
        res("NO_TABLE_USERS");
      } else {
        res(rows); // 这里不需要JSON序列化再解析,直接返回rows即可
      }
    });
  });
};

module.exports = getAll;

2. 修复add函数的SQL语法错误

你的INSERT语句里password,多了一个逗号,这会导致SQL执行失败:

// addFile 修改后
const sqlite3 = require("sqlite3").verbose();
const db = new sqlite3.Database("./db/dbSqlite/app.db", sqlite3.OPEN_READWRITE);

const add = (user) => {
  return new Promise((res, rej) => {
    // 去掉password后面的多余逗号
    db.run(`INSERT INTO users(login, password) VALUES(?, ?)`, user, (err) => {
      if (err) {
        rej(false); // 出错时返回false
      } else {
        res(true); // 成功返回true
      }
    });
    // db.serialize在这里没必要,因为只有一个操作
  });
};

module.exports = add;

3. 修复路由中的调用方式

现在getAll是函数了,你需要调用它(user.getAll())而不是直接引用旧的Promise:

// route 修改后
router.post("/add", helper.isLoggedIn, helper.isAdmin, (req, res) => {
  let msg = "User created successfully!";
  // 这里注意Object.values(req.body)的结果是否符合参数要求,确保是[login, password]
  user.add(Object.values(req.body))
    .then((state) => {
      if (!state) msg = "Name already used!";
      // 调用getAll函数获取最新数据
      return user.getAll();
    })
    .then((result) => {
      res.render("users", { name: req.user, users: result, msg: msg });
    })
    .catch((err) => {
      // 最好加上错误处理,避免请求挂起
      console.error(err);
      res.render("users", { name: req.user, users: [], msg: "Failed to create user!" });
    });
});

额外建议

  • 数据库连接可以考虑统一管理,避免每个模块都创建新的连接实例。
  • 错误处理要更完善,比如在add函数里可以把具体的错误信息传递出去,方便排查问题。

内容的提问来源于stack exchange,提问作者Miqez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:43:10