Skip to content

IndexedDBWrapper

概述

  • IndexedDB 是一种在客户端存储大量结构化数据的高级 API。与早期的 Web 存储技术如 localStorage 和 cookie 相比,IndexedDB 提供了更强大的功能。但原生 IndexedDB 操作需要使用大量的回调函数,增加了开发者的心智负担以及代码维护难度。

  • IndexedDBWrapper 提供了基于 Promise 的异步操作数据库的类。此封装类提供了数据库的创建、读取、写入、更新和删除等基本功能,以简化对 IndexedDB 的使用。

构造函数

dbName:要操作的数据库名称。

storeName:数据库中的存储对象名称。

version(可选):数据库的版本号。

js
import { IndexedDBWrapper } from "cat-tool";
const db = new IndexedDBWrapper("MyDatabase", "MyObjectStore");

方法

db.open()打开指定的 IndexedDB 数据库,并根据需要创建存储对象和索引。 返回值:一个 Promise 对象,成功时解析为打开的数据库对象,失败时拒绝并返回错误。

db.add(data)向数据库中添加数据。

参数:data:要添加的数据对象。 返回值:一个 Promise 对象,成功时解析为添加操作的结果,失败时拒绝并返回错误。

db.get(key)根据指定的键从数据库中查询数据。 参数:key:要查询的数据的键。 返回值:一个 Promise 对象,成功时解析为查询到的数据,失败时拒绝并返回错误。

db.update(data)更新数据库中的数据。 参数:data:包含更新信息的数据对象。 返回值:一个 Promise 对象,成功时解析为更新操作的结果,失败时拒绝并返回错误。

db.delete(key)根据指定的键删除数据库中的数据。 参数:key:要删除的数据的键。 返回值:一个 Promise 对象,成功时解析为空,失败时拒绝并返回错误。

使用示例 1

js
async () => {
  const db = new IndexedDBWrapper("MyDatabase", "MyObjectStore");
  try {
    await db.open();
    console.log("数据库打开成功");

    // 添加数据
    const id = await db.add({ name: "John Doe", age: 30 });
    console.log("数据添加成功,ID:", id);

    // 查询数据
    const data = await db.get(id);
    console.log("查询到的数据:", data);

    // 修改数据
    data.age = 31;
    await db.update(data);
    console.log("数据更新成功");

    // 删除数据
    await db.delete(id);
    console.log("数据删除成功");
  } catch (error) {
    console.error("操作失败", error);
  }
};

使用示例 2

ts
// store.js
import { IndexedDBWrapper } from "cat-tool";
type Data = {
  id: number | string;
  value: any;
};
// 创建数据库
const store = new IndexedDBWrapper("dbName", "StoreName", 1);

// 创建或更新数据
const setData = async (data: Data) => {
  const oldData = await store.get(data.id);
  oldData
    ? await store.update({
        id: data.id,
        value: data.value,
      })
    : await store.add({
        id: data.id,
        value: data.value,
      });
};

// 获取数据
const getData = async (id: number | string): Promise<any> => {
  return await store.get(id);
};
export default { setData, getData, value: store };
js
import store from "./store";
store.getData("id");
store.setData({ id, value });

注意事项

  • 在进行数据库操作前需要等待数据库打开成功,可以使用 Promise 或 async/await 来实现。
  • 对象存储需要唯一id!

基于 MIT 许可发布