Storage Migration in JavaScript
Migrate data between storage formats
AdvancedLocalStorage/SessionStorageExample 7 of 10
storage-migration.js
1// Method 1: Simple migration2function migrateStorage() {3 const oldData = localStorage.getItem('oldKey');4 if (oldData) {5 // Migrate to new format6 const newData = {7 version: 2,8 data: JSON.parse(oldData)9 };10 localStorage.setItem('newKey', JSON.stringify(newData));11 localStorage.removeItem('oldKey');12 console.log('Migration complete');13 }14}1516// Method 2: Version-based migration17const STORAGE_VERSION = 2;1819function checkAndMigrate() {20 const currentVersion = localStorage.getItem('storageVersion');2122 if (!currentVersion || parseInt(currentVersion) < STORAGE_VERSION) {23 console.log('Migration needed');24 migrateToVersion(parseInt(currentVersion) || 1);25 localStorage.setItem('storageVersion', STORAGE_VERSION.toString());26 }27}2829function migrateToVersion(fromVersion) {30 if (fromVersion === 1) {31 // Migrate from v1 to v232 const v1Data = localStorage.getItem('userData');33 if (v1Data) {34 const data = JSON.parse(v1Data);35 const v2Data = {36 ...data,37 metadata: {38 createdAt: new Date().toISOString(),39 version: 240 }41 };42 localStorage.setItem('userData', JSON.stringify(v2Data));43 }44 }45}4647checkAndMigrate();4849// Method 3: Migration with backup50function migrateWithBackup() {51 // Create backup52 const backup = {};53 for (let i = 0; i < localStorage.length; i++) {54 const key = localStorage.key(i);55 backup[key] = localStorage.getItem(key);56 }57 localStorage.setItem('backup_' + Date.now(), JSON.stringify(backup));5859 // Perform migration60 try {61 migrateStorage();62 console.log('Migration successful');63 } catch (e) {64 console.error('Migration failed, restoring backup');65 // Restore from backup66 restoreBackup(backup);67 }68}6970function restoreBackup(backup) {71 localStorage.clear();72 Object.keys(backup).forEach(key => {73 localStorage.setItem(key, backup[key]);74 });75}7677// Method 4: Progressive migration78function progressiveMigration() {79 const migrationSteps = [80 () => migrateStep1(),81 () => migrateStep2(),82 () => migrateStep3()83 ];8485 migrationSteps.forEach((step, index) => {86 try {87 step();88 console.log(`Step ${index + 1} complete`);89 } catch (e) {90 console.error(`Step ${index + 1} failed:`, e);91 throw e;92 }93 });94}9596function migrateStep1() {97 // Step 1 logic98}99100function migrateStep2() {101 // Step 2 logic102}103104function migrateStep3() {105 // Step 3 logic106}107108// Method 5: Data transformation109function transformData(oldFormat) {110 // Transform old format to new format111 return {112 id: oldFormat.userId,113 name: oldFormat.fullName,114 email: oldFormat.emailAddress,115 settings: {116 theme: oldFormat.theme || 'light',117 notifications: oldFormat.notify || true118 }119 };120}121122function migrateUserData() {123 const oldData = localStorage.getItem('oldUserData');124 if (oldData) {125 const parsed = JSON.parse(oldData);126 const newData = transformData(parsed);127 localStorage.setItem('userData', JSON.stringify(newData));128 localStorage.removeItem('oldUserData');129 }130}
Output
Migration complete Migration needed Step 1 complete Step 2 complete Step 3 complete
What's going on
Migration updates storage format.
Migration Strategies
Version-based
Backup before migrate
Progressive steps
Data transformation
Best Practices
Check version
Create backups
Test migrations
Handle errors
Use Cases
Schema changes
Format updates
Data restructuring
Version upgrades
Important
Always backup
Test thoroughly
Handle failures
Document changes