async function openDB(dbName = 'MyAppDB', version = 1) {
return new Promise((resolve, reject) => {
const request = indexedDB.open(dbName, version);
request.onerror = () => reject(request.error);
request.onsuccess = () => resolve(request.result);
request.onupgradeneeded = (event) => {
const db = event.target.result;
if (!db.objectStoreNames.contains('users')) {
const store = db.createObjectStore('users', { keyPath: 'id', autoIncrement: true });
store.createIndex('email', 'email', { unique: true });
store.createIndex('age', 'age');
store.createIndex('createdAt', 'createdAt');
}
if (!db.objectStoreNames.contains('todos')) {
db.createObjectStore('todos', { keyPath: 'id', autoIncrement: true });
}
};
});
}
async function addUser(db, user) {
return new Promise((resolve, reject) => {
const tx = db.transaction('users', 'readwrite');
const store = tx.objectStore('users');
const req = store.add(user);
req.onsuccess = () => resolve(req.result);
req.onerror = () => reject(req.error);
tx.oncomplete = () => console.log('添加成功');
tx.onerror = () => console.error('事务失败');
});
}
async function getUser(db, id) {
return new Promise((resolve, reject) => {
const tx = db.transaction('users', 'readonly');
const store = tx.objectStore('users');
const req = store.get(id);
req.onsuccess = () => resolve(req.result);
req.onerror = () => reject(req.error);
});
}
async function findUsersByAge(db, minAge, maxAge) {
return new Promise((resolve, reject) => {
const tx = db.transaction('users', 'readonly');
const store = tx.objectStore('users');
const index = store.index('age');
const range = IDBKeyRange.bound(minAge, maxAge);
const request = index.getAll(range);
request.onsuccess = () => resolve(request.result);
request.onerror = () => reject(request.error);
});
}
async function main() {
try {
const db = await openDB('MyAppDB', 1);
await addUser(db, { name: '重阳', email: '[email protected]', age: 28, createdAt: new Date() });
const user = await getUser(db, 1);
console.log('找到用户:', user);
const adults = await findUsersByAge(db, 18, 40);
console.log('18-40 岁用户:', adults);
} catch (err) {
console.error('IndexedDB 操作失败:', err);
}
}
main();