PouchDB 检查本地数据库是不是存在

Posted

技术标签:

【中文标题】PouchDB 检查本地数据库是不是存在【英文标题】:PouchDB check if local database existsPouchDB 检查本地数据库是否存在 【发布时间】:2016-11-27 06:24:49 【问题描述】:

问题很简单,但即使通过互联网和 pouchdb 源进行详尽搜索,我也找不到检查本地数据库是否存在的函数。

这种情况的用例是检查本地数据库是否已经存在,然后选择是否成功登录。

最好的问候

【问题讨论】:

还是没有解决办法? 【参考方案1】:

确实有一个skip_setup 选项可用。

正如the documentation 中所说,默认情况下,PouchDB 会检查数据库是否存在,如果不存在则尝试创建它。您可以将此选项设置为true 以跳过此设置。

启用该选项后,查询数据库信息时如果数据库不存在会报错,例如:

const db = new PouchDb('DB_URL_OR_NAME',  skip_setup: true );

db.info()
  .then(() => 
    // The database exists.
    // Do something...
  )
  .catch(e => 
    // No database found and it was not created.
    // Do something else...
  );

【讨论】:

有趣。我尝试了没有创建数据库的 skip_setup 的 info() 。感谢您指出组合。像魅力一样工作。 在文档中,说明此选项仅适用于远程数据库,此问题与本地数据库有关。不幸的是,我用本地数据库尝试了这个选项,但它不起作用。 正如@akofman 所说,问题是关于本地数据库,“skip_setup”不适用于此处。【参考方案2】:

正如 akofman 指出的,skip_setup 不适用于本地数据库。所以我知道这样做的唯一方法是一种解决方法 - 检查新数据库是否为空,然后立即删除它。当然,如果有问题的数据库存在但为空,这将无济于事......

const testdb = new PouchDB('testdb_name');

testdb.info().then(function (details) 
if (details.doc_count == 0 && details.update_seq == 0) 
    alert ('database does not exist');
    testdb.destroy().then (function() console.log('test db removed'););

else alert ('database exists');
)
.catch(function (err) 
   console.log('error: ' + err);
return;
);

【讨论】:

【参考方案3】:

我需要确认数据库已从客户的浏览器中删除。问题是您需要创建数据库才能删除它...

至少在 Chrome 上,Pouch 存储数据的默认方式是在带有前缀 _pouch_ 的 indexedDB 中。所以我只是删除了 indexedDB 数据库。

这是我的代码。它返回一个匹配 PouchDB 语法的承诺。

function deletePouchDatabase(dbName) 
  return new Promise((resolve, reject) => 
    var req = indexedDB.deleteDatabase('_pouch_' + dbName);
    req.onsuccess = function () 
      resolve(null)
    ;
    req.onerror = function () 
      reject(new Error("There was an error"))
    ;
    req.onblocked = function () 
      reject(new Error("The operation was blocked"))
    ;
  );

所以你可以使用类似的方法来检查它是否存在。如果存在,则 Promise 返回 true,如果不存在,则返回 false

function pouchDatadatabaseExists(dbname) 
  return new Promise((resolve, reject) => 
    const req = indexedDB.open(`_pouch_$dbname`);
    req.onsuccess = function () 
      resolve(true)
    
    req.onupgradeneeded = function () 
      resolve(false)
    
  );

【讨论】:

以上是关于PouchDB 检查本地数据库是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PouchDB 导入/导出数据库

pouch db中的数据安全机制

检查本地存储值是不是存在[重复]

如何检查本地是不是存在带有特定标签的 Docker 镜像?

检查文件是不是存在于 javascript 和 HTML 中,如果您在本地打开页面

PouchDB:JavaScript同步数据库