概述通过游标导出为 NDJSON 并恢复,可实现跨环境迁移与备份。本文给出标准实现。导出 NDJSONfunction openDB(name) { return new Promise((resolve, reject) => { const r = indexedDB.open(name, 1); r.onsuccess = () => resolve(r.result); r.onerror = () => reject(r.error); }); } async function exportStore(dbName, storeName) { const db = await openDB(dbName); const tx = db.transaction(storeName, 'readonly'); const store = tx.objectStore(storeName); const req = store.openCursor(); const lines = []; await new Promise((resolve, reject) => { req.onsuccess = e => { const c = e.target.result; if (c) { lines.push(JSON.stringify(c.value)); c.continue(); } else resolve(); }; req.onerror = () => reject(req.error); }); db.close(); const blob = new Blob([lines.join('\n')], { type: 'application/x-ndjson' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `${dbName}-${storeName}.ndjson`; a.click(); URL.revokeObjectURL(url); } 恢复 NDJSONfunction openDBForRestore(name, storeName, keyPath = 'id') { return new Promise((resolve, reject) => { const r = indexedDB.open(name, 1); r.onupgradeneeded = () => { const db = r.result; if (!db.objectStoreNames.contains(storeName)) db.createObjectStore(storeName, { keyPath }); }; r.onsuccess = () => resolve(r.result); r.onerror = () => reject(r.error); }); } async function restoreFromFile(dbName, storeName, file) { const text = await file.text(); const db = await openDBForRestore(dbName, storeName); const tx = db.transaction(storeName, 'readwrite'); const s = tx.objectStore(storeName); for (const line of text.split('\n')) { if (line.trim()) s.put(JSON.parse(line)); } await new Promise((resolve, reject) => { tx.oncomplete = resolve; tx.onerror = () => reject(tx.error); }); db.close(); }

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
3.144497s