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

Electron+React+SQLite获取用户报错:Cannot read properties of undefined (reading 'getUsers')

错误排查与修复方案

核心错误原因:模块引用文件名不匹配

你遇到的TypeError: Cannot read properties of undefined (reading 'getUsers'),最直接的诱因是文件名拼写不一致:

  • 数据库操作文件实际命名为 dbmng.js
  • 但在main.js中你写了const dbmgr = require('../src/models/dbmgr');,这里的dbmgr和实际文件名dbmng拼写错误,导致模块加载失败,dbmgr变量为undefined,自然无法调用getUsers方法。

修复步骤1:修正模块引用

将main.js中的引用语句改为:

const dbmgr = require('../src/models/dbmng'); // 匹配实际文件名dbmng

其他潜在问题与修复

除核心错误外,代码还有几处细节需要修正,避免后续出现异常:

1. dbmng.js中未定义变量引用

在getUsers函数里,你写了console.log('Users data:', users);,但users变量从未定义,应替换为查询结果res:

// 原错误代码
console.log('Users data:', users); 
// 修正后
console.log('Users data:', res); 

2. preload.js中Promise未处理错误场景

当前的getUsers仅监听了成功的usersData响应,若主进程出现异常,前端无法捕获错误。建议添加超时和错误监听:

contextBridge.exposeInMainWorld('api', {
  getUsers: () => {
    return new Promise((resolve, reject) => {
      // 添加超时处理,避免无响应
      const timeout = setTimeout(() => {
        reject(new Error('请求超时'));
      }, 5000);

      ipcRenderer.once('usersData', (_, data) => {
        clearTimeout(timeout);
        resolve(data);
      });

      // 监听主进程发送的错误事件
      ipcRenderer.once('getUsersError', (_, errorMsg) => {
        clearTimeout(timeout);
        reject(new Error(errorMsg));
      });

      ipcRenderer.send('getUsers');
    });
  },
});

对应的主进程可在catch块中新增错误事件发送:

ipcMain.on('getUsers', async (event) => {
    try {
      const users = await dbmgr.getUsers();
      event.reply('usersData', users);
    } catch (error) {
      console.error('Error retrieving users:', error);
      event.reply('getUsersError', error.message);
      event.reply('usersData', []);
    }
});

3. 删除dbmng.js中不必要的提前调用

你在dbmng.js末尾写了console.log(getUsers()),这会在模块加载时自动执行数据库查询,属于不必要的启动请求,建议删除该行代码。


验证修复

  1. 确认所有文件名与引用路径完全一致
  2. 修正上述所有代码问题
  3. 重启Electron应用,检查前端是否能正常渲染用户数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 16:12:48