Skip to content

Instantly share code, notes, and snippets.

@bczhc
Last active March 3, 2025 03:26
Show Gist options
  • Save bczhc/693e55ecc35e546eb86c498618d413ef to your computer and use it in GitHub Desktop.
Save bczhc/693e55ecc35e546eb86c498618d413ef to your computer and use it in GitHub Desktop.
export deepseek chat history in browser console (cached locally) #deepseek #llm
// 打开数据库
function openDatabase(dbName) {
return new Promise((resolve, reject) => {
const request = indexedDB.open(dbName);
request.onsuccess = (event) => {
const db = event.target.result;
resolve(db);
};
request.onerror = (event) => {
reject(`Error opening database: ${event.target.errorCode}`);
};
});
}
// 获取所有对象存储的名称
function getObjectStoreNames(db) {
return Array.from(db.objectStoreNames);
}
// 读取对象存储中的所有数据
function readAllData(db, objectStoreName) {
return new Promise((resolve, reject) => {
const transaction = db.transaction([objectStoreName], 'readonly');
const objectStore = transaction.objectStore(objectStoreName);
const request = objectStore.getAll();
request.onsuccess = (event) => {
resolve(event.target.result);
};
request.onerror = (event) => {
reject(`Error reading data from object store ${objectStoreName}: ${event.target.errorCode}`);
};
});
}
// 主函数:输出 IndexedDB 中的所有数据
async function inspectIndexedDB(dbName) {
try {
const db = await openDatabase(dbName);
const objectStoreNames = getObjectStoreNames(db);
console.log(`Database: ${dbName}`);
for (const objectStoreName of objectStoreNames) {
const data = await readAllData(db, objectStoreName);
console.log(`Object Store: ${objectStoreName}`);
// console.log(JSON.stringify(data));
console.log(data);
}
} catch (error) {
console.error(error);
}
}
// 使用示例:替换 'YourDatabaseName' 为你要检查的数据库名称
await inspectIndexedDB('deepseek-chat');
@zobkazi
Copy link

zobkazi commented Mar 3, 2025

你的 openDatabase 函数使用 indexedDB.open(dbName) 来打开数据库,但这里有一些需要注意的地方:

  1. 缺少 onerror 处理:如果 indexedDB.open 失败(比如权限问题、存储空间不足等),你需要 onerror 处理 reject
  2. 需要 onupgradeneeded 处理(如果数据库不存在或版本升级):
    • onupgradeneeded 事件用于初始化数据库结构(如创建对象存储 objectStore)。
    • 如果数据库是第一次创建,onsuccess 可能不会立即返回一个可用的 db,而是会触发 onupgradeneeded 先进行一些处理。

改进后的代码:

function openDatabase(dbName, version = 1) {
    return new Promise((resolve, reject) => {
        const request = indexedDB.open(dbName, version);

        request.onsuccess = (event) => {
            resolve(event.target.result);
        };

        request.onerror = (event) => {
            reject(new Error(`Failed to open database: ${event.target.errorCode}`));
        };

        request.onupgradeneeded = (event) => {
            const db = event.target.result;
            console.log(`Database ${dbName} upgraded to version ${version}`);
            // 在这里可以创建 objectStore(如果需要)
            if (!db.objectStoreNames.contains('storeName')) {
                db.createObjectStore('storeName', { keyPath: 'id', autoIncrement: true });
            }
        };
    });
}

改动点:

  • 添加 onerror 处理,避免程序崩溃
  • onupgradeneeded 事件创建对象存储(如果需要)
  • 增加 version 作为参数,以便后续升级数据库

你可以调用 openDatabase("myDB") 来使用它。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment