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

Angular中使用Dexie导出IndexedDB报错:storeNames参数为空

解决Dexie(Angular)导出IndexedDB的问题

错误原因分析

1. InvalidAccessError: Failed to execute 'transaction' on 'IDBDatabase': The storeNames parameter was empty.

核心问题:

  • new Dexie() 不是异步操作,不能用await直接修饰,你初始化数据库的方式有误。
  • 数据库未正确打开,或者数据库内没有任何对象仓库(表),导致exportDB无法创建包含有效表的事务。

2. TypeError: db.export is not a function

核心问题:
你未将dexie-export-import的扩展注册到Dexie原型上,因此Dexie实例不会自带export方法。


正确解决方案

方案一:使用exportDB函数(正确初始化数据库)

先确保数据库正确初始化、打开,且存在至少一个表:

import Dexie from 'dexie';
import { exportDB } from 'dexie-export-import';

// 1. 定义Dexie实例并指定表结构(已有数据库需匹配现有结构)
const db = new Dexie('myDB');
db.version(1).stores({
  // 替换为你的实际表结构,示例:
  users: 'id, name, email'
});

// 2. 打开数据库
await db.open();

// 3. 执行导出
const blob = await exportDB(db);

如果是已有数据库,可简化表结构定义(仅声明表存在):

db.version(1).stores({
  users: null // 表示该表已存在,无需定义字段
});

方案二:使用db.export()方法(需扩展Dexie)

要使用实例方法export,需先注册扩展:

import Dexie from 'dexie';
import { extend } from 'dexie-export-import';

// 关键步骤:扩展Dexie原型,添加export方法
extend(Dexie);

// 初始化数据库(同方案一)
const db = new Dexie('myDB');
db.version(1).stores({
  users: 'id, name, email'
});
await db.open();

// 执行导出(可配置导出选项)
const options = {
  includeData: true // 可选:是否包含表数据,默认true
};
const blob = await db.export(options);

额外注意事项

  • 确保dexie与dexie-export-import版本兼容,建议安装同系列版本(如均使用3.x版本)。
  • 若数据库确实无任何表,导出操作无意义,需先创建至少一个表再尝试导出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:40:46