본문 바로가기
TIL

[TIL] 23.06.12

by 수비두비 2023. 6. 12.

회고

알고리즘 한 문제를 풀었다. 문제가 어렵지 않았는데 아무리 해도 문제가 풀리지 않았는데 결국 문제 조건을 놓쳐버리는 바람에 어떻게 해도 답이 나오지 않았었다. 문제 조건을 꼼꼼히 보도록 하자.

 

indexedDB를 통해서 브라우저에 데이터를 저장하는 로직을 만들었다. 아직 여기 개념에 통달하지 못했는데, 처음 db를 만들면서 table(?)을 만들고(짧게 조사한 바로는 무조건 db를 만들면서 table을 추가해야하는 거 같다), 추후에 table을 추가할 때는 db의 버전을 올려주어야 하는데 이 부분을 해결하려고 애를 썼다. version 정보를 localStorage에 저장해서 해당 db 내의 테이블이 추가 될 때 localStorage 의 버전을 올려주면서 임시로 해결 할 수 있긴 하지만, 몇 가지 예외사항 때문에 이 방법말고 다른 방법을 모색했다.

 

 

  • 해결책은 처음 부터 db 가 있는지 조사를 하고 db가 없다면 버전 1로 db를 만들어준다.

 

브라우저 내에 db가 있는지 조회 하는 코드

async function checkDBExists(name: string): Promise<boolean> {
  const dbs = await window.indexedDB.databases()
  return dbs.some((db) => db.name === name)
}

 

  • 그리고 해당 db내의 table이 있다면 version 은 그대로 한다
  • 만약 없었다면, version 을 storeName.length + 1 만큼 늘려서 테이블을 추가한다

해당 db table 을 포함하는지 확인하는 코드

export function getDbTableList(dbName: string): Promise<string[]> {
  return new Promise((resolve, reject) => {
    const open = indexedDB.open(dbName)

    open.onsuccess = () => {
      const db: IDBDatabase = open.result
      const storeNames = Array.from(db.objectStoreNames)
      resolve(storeNames)
      db.close()
    }
    open.onerror = (e) => reject(e)
  })
}

'TIL' 카테고리의 다른 글

[TIL] 24.02.21  (0) 2024.02.21
[TIL] 23.06.18  (0) 2023.06.18
[TIL] 23.06.11  (0) 2023.06.11
[TIL] 23.06.09  (0) 2023.06.09
[TIL] 23.06.06  (0) 2023.06.06

댓글