如何检测现有PouchDB数据库使用的IndexedDB适配器类型
PouchDB 存量数据库适配器类型判定方法
两种适配器的底层存储规则存在明确差异,有两种可靠的零风险判定方案,不会损坏存量数据:
方案1:零侵入检测(推荐,无需初始化PouchDB实例)
两种适配器在浏览器IndexedDB中创建的底层库名前缀完全不同,可以直接通过浏览器IndexedDB接口检测,不会触发新库创建逻辑:
idb适配器生成的底层IndexedDB库名格式为:_pouch_<你的业务数据库名>,前缀为带下划线的_pouch_indexeddb适配器生成的底层IndexedDB库名格式为:pouchdb_<你的业务数据库名>,前缀为不带下划线的pouchdb_
直接运行以下检测代码即可:
async function getPouchDBAdapterType(targetDbName) { const existingIndexedDbs = await indexedDB.databases(); const dbNameSet = new Set(existingIndexedDbs.map(item => item.name)); if (dbNameSet.has(`_pouch_${targetDbName}`)) { return 'idb'; } if (dbNameSet.has(`pouchdb_${targetDbName}`)) { return 'indexeddb'; } return null; // 未找到对应存量数据库 } // 调用示例:检测名为user_data的业务库适配器 getPouchDBAdapterType('user_data').then(type => { console.log('存量库适配器类型:', type); });
方案2:实例属性读取(适合已经完成PouchDB初始化的场景)
PouchDB实例初始化完成后,会在实例上挂载adapter属性直接标识当前使用的适配器类型,直接读取即可:
// 注意:初始化时不要手动指定adapter参数,否则会强制使用指定适配器创建新实例 const db = new PouchDB('user_data'); console.log(db.adapter); // 输出值为'idb' 或 'indexeddb'
注意事项:检测前不要在初始化PouchDB时手动传入
adapter配置,如果传入的适配器和存量库不匹配,PouchDB会直接创建空的新库,无法读取原有存量数据,优先使用方案1做前置检测。
内容的提问来源于stack exchange,提问作者Andrey Kiyanovsky
相关产品推荐
相关产品推荐

