วิธีใช้ LocalStorage อย่างปลอดภัย

Nov 25 2022
ตรวจสอบว่าเบราว์เซอร์รองรับ localStorage หรือไม่
เมื่อสัปดาห์ที่แล้ว ฉันถูกขัดจังหวะด้วยข้อความเตือนข้อผิดพลาดในการผลิตเมื่อฉันจดจ่ออยู่กับการเขียนโค้ด ฉันต้องหยุดทำงานและค้นหาว่าเกิดอะไรขึ้น
ภาพถ่ายโดย Carlos Muza บน Unsplash

เมื่อสัปดาห์ที่แล้ว ฉันถูกขัดจังหวะด้วยข้อความเตือนข้อผิดพลาดในการผลิตเมื่อฉันจดจ่ออยู่กับการเขียนโค้ด ฉันต้องหยุดทำงานและค้นหาว่าเกิดอะไรขึ้น

ข้อผิดพลาดคือ

เราไม่สามารถรู้ได้ว่ารหัสใดทำงานได้ไม่ดีจากตำแหน่งรหัสสำหรับไฟล์จาวาสคริปต์การผลิตทั้งหมดจะถูกรวบรวมและ uglify

เมื่อค้นหาปัญหา เราพบว่าเบราว์เซอร์ไม่รองรับ localStorage ทางออกที่ง่ายที่สุดคือการตรวจจับข้อผิดพลาดขณะใช้ localStorage:

try {
  const data = localStroage.getItem(key)
} catch(e) {
  // if localStorage not support, fallback
}

วิธีที่ดีกว่าคือการจัดเตรียมไฟล์ util เพื่อให้สำเร็จ:

export const storage = {
  getItem(key, fallbackValue) {
    try {
      return localStorage.getItem(key);
    } catch(e) {
      return fallbackValue;
    }
  },
  setItem(key, value) {
    try {
      localStorage.setItem(key, value);
    } catch(e) {
      // 
    }
  }
  removeItem(key, value) {
    try {
      localStorage.removeItem(key, value);
    } catch(e) {
      // 
    }
  }
}

หากไม่รองรับ localStorage เราสามารถถอยกลับไปใช้หน่วยความจำได้ วิธีสุดท้ายจะเป็นดังนี้:

function isSupportLS() {
  try {
    localStorage.setItem('_ranger-test-key', 'hi')
    localStorage.getItem('_ranger-test-key')
    localStorage.removeItem('_ranger-test-key')
    return true
  } catch (e) {
    return false
  }
}

class Memory {
  constructor() {
    this.cache = {}
  }
  setItem(cacheKey, data) {
    this.cache[cacheKey] = data
  }
  getItem(cacheKey) {
    return this.cache[cacheKey]
  }
  removeItem(cacheKey) {
    this.cache[cacheKey] = undefined
  }
}
// if not support localStorage, fallback to memory
export const storage = isSupportLS() ? window.localStorage : new Memory();

จากนั้นทดสอบรหัสนี้ในคอนโซล Chrome ซึ่งทำงานได้ดี:

หวังว่าบทความนี้จะช่วยคุณได้ และหวังว่าจะติดตามฉันเพื่อเรียนรู้ทักษะเพิ่มเติม

เนื้อหาเพิ่มเติมที่PlainEnglish.io สมัครรับจดหมายข่าวรายสัปดาห์ฟรีของ เรา ติดตามเราได้ที่Twitter , LinkedIn , YouTubeและDiscord สนใจในการแฮ็กการเจริญเติบโตหรือไม่? ตรวจสอบวงจร