通过Dexie与IndexedDB交互所需的步骤

时间:2017-03-31 22:39:16

标签: dexie

我们假设我使用以下步骤创建了一个非常简单的数据存储区:

  1. var db = new Dexie(' MyDatabase');

  2. db.version(1).stores({朋友:'姓名,年龄'});

  3. db.friends.add({name:' Camilla',年龄:25});

  4. 现在,假设用户关闭浏览器并在一天后回来,我们需要查询已保存在应该已存在的数据存储区中的数据。在查询数据存储区或插入新行之前,是否每次都需要包括第1行和第2行?当我需要执行第2行时,我很困惑 - 它基本上是在我对数据存储区执行任何操作之前的吗?

1 个答案:

答案 0 :(得分:1)

每次打开数据库时,无论是否需要创建,升级或只是打开数据库,通常都会提供db.version(x).stores({...})。通过提供此信息,您将直接在db对象上访问您的表(访问例如db.friends.toArray(),而无需等待db.open()完成),如下所示:

var db = new Dexie("friendsDB");
db.version(1).stores({friends: 'id, name'});
// Here you can just access db.friends without waiting for db.open()
db.friends.toArray()
   .then(friends => console.table(friends))
   .catch(err => console.error(err));

但是,也可以动态打开数据库 - 也就是说,在不知道其表或索引的情况下打开一个现有的数据库。为此,您只需省略version()。stores()部分。请注意,您无法直接在数据库实例上访问表,并且您无法自动创建数据库。只能在db.open()完成后才能通过tables属性和table()方法访问表。

new Dexie("friendsDB").open().then(db => {
    console.log("Table names: " + db.tables.map(t => t.name));
    return db.table("friends").toArray();
}).then(friends => {
    console.table(friends);
}).catch(err => console.error(err));