有没有办法删除PouchDB中的所有数据库(没有给定的名称)

时间:2016-10-06 09:52:30

标签: javascript pouchdb

我想创建一个重置所有内容并初始化我的webapp的功能。由于我有几个生成的名称数据库,我想将它们全部删除。

有没有办法做PouchDB.destroyAll()

之类的事情

3 个答案:

答案 0 :(得分:2)

直接使用PouchDB是不可能的,但您可以使用以下代码段来完成:

indexedDB.webkitGetDatabaseNames().onsuccess = (e) => {
  for(let i = 0; i < e.target.result.length; i++){
    let db = e.target.result[i];
    if(db.startsWith('_pouch_')){
      indexedDB.deleteDatabase(db);
    }
  }
};

这假设您在chrome中使用带有indexedDB的PouchDB。如果不是这种情况,您必须调整上述代码以使用您正在使用的任何存储引擎和浏览器/服务器。

答案 1 :(得分:1)

我建议通过使用PouchDB allDbs() plugin来做到这一点,因为当使用了不同的数据库适配器时,它可以工作。

例如

try {
   const dbs = PouchDB.allDbs();
   // dbs is an array of strings, e.g. ['mydb1', 'mydb2']
   // delete the databases by name or whatever.
} catch(err) {
}

destroy()方法很方便,请参见Destroying a database

从开发人员的角度来看,请参见Deleting your local database

答案 2 :(得分:0)

IndexedDB:webkitGetDatabaseNames已从Chrome中删除 参见-> https://www.chromestatus.com/feature/5725741740195840

同意直接使用PouchDB无法实现,您可以使用以下方法进行。


export const deletePouchDB = async() =>{
    const dbs = await window.indexedDB.databases();
    dbs.forEach(db => {
        if (db.name.includes('_pouch_')) {
            window.indexedDB.deleteDatabase(db.name);
        }
    });
};