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

Dexie调用get方法返回undefined且db.geo未定义问题求助

问题原因
  • 核心错误为表名不匹配:你通过db.version(1).stores()配置的表名为data,Dexie会自动将表实例挂载到db.data属性下,代码中全程访问不存在的db.geo属性,自然返回undefined,调用其方法就会抛出对应类型错误。
  • 语法错误:定义的data函数未添加async关键字,函数内部直接使用await会触发语法错误,无法正常执行。
  • 逻辑漏洞:仅在数据库不存在时执行表配置,若设备上已存在旧版本的data数据库,且旧版本未定义对应表,未做版本升级处理的情况下,就算表名填写正确也会出现表实例不存在的问题。
  • 你提到的“数据已经全部成功插入”属于测试过程中本地缓存未清理的假象,大概率是之前测试时遗留了配置过geo表的旧版本数据库,当前提供的代码逻辑不可能完成db.geo.bulkPut写入操作。
修正方案
  1. 确保表配置的键名和实际访问的表名一致,如果需要使用geo作为表名,修改表配置如下:
await db.version(1).stores({
  geo: 'id,name'
});
  1. 给使用await的函数添加async关键字
  2. 无需额外判断数据库是否存在,Dexie原生支持初始化时直接声明版本和表结构,会自动比对本地版本完成初始化或升级操作,更规范的参考代码如下:
const db = new Dexie('data');
const dataToInsert = [{id: "aaaa", name: "bbb"}]

// 直接声明版本和表结构
db.version(1).stores({
  geo: 'id,name'
});

async function handleData() {
  const exists = await Dexie.exists("data");
  if (!exists) {
    await db.geo.bulkPut(dataToInsert);
  }
  const record = await db.geo.get("aaaa");
  console.log(record);
}

如果不需要兼容旧数据,遇到结构不匹配的问题可以先删除本地IndexedDB缓存再测试,避免旧数据干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:18:02