localforage indexedDB如何使用索引

奔四少年發表於2021-02-28

簡單介紹下localForage。localForage 是一個 JavaScript 庫,通過簡單類似 localStorage API 的非同步儲存來改進你的 Web 應用程式的離線體驗。它能儲存多種型別的資料,而不僅僅是字串。 內部有一個優雅降級策略。

預設情況下,localForage 按照以下順序選擇資料倉儲的後端驅動:

IndexedDB

WebSQL

localStorage

扯遠了。那麼言歸正傳。localForage這個庫可以說功能很強大也很齊全了。但是對於indexedDB這個資料倉儲。localForage卻沒有支援給表加索引,通過索引查詢資料的支援。可是我就想用怎麼辦。

方案一:有個基於localForage的庫叫localforage-indexes,這個庫可以給表加索引。但是!!!!

 

localforage indexedDB如何使用索引

簡單來說,會衝突,而且createIndex的時候,如果已經建立會報錯。程式無法正常執行了。那麼其實

localforage indexedDB如何使用索引

這就是它為什麼github只有1星的原因了。完全沒法用是不是。

我的解決方案是。原生建立indexedDB索引+localForage。

show code 首先是用原生初始化給需要的表加上索引

// 春風得意馬蹄疾,一日看盡長安花。
//          〔唐〕孟郊《登科後》
//程式碼作者:xbw
let dbVersion = 1.0,
    store = "project"
//建立個物件,到時候建立索引直接迴圈一起建立了。
let projectIndexObj = {}
projectIndexObj["stroeNmae1"] = [{
    indexName: "id",
    unique: false
}];
projectIndexObj["stroeNmae2"] = [{
    indexName: "id",
    unique: false
}];
projectIndexObj["stroeNmae3"] = [{
    indexName: "name",
    unique: false
}];

var openRequest = indexedDB.open(store, dbVersion);

openRequest.onupgradeneeded = function (e) {
    let db = e.target.result;
    for (let key in projectIndexObj) {
        if (!db.objectStoreNames.contains(key)) {
            var store = db.createObjectStore(key);
            //建立索引
            projectIndexObj[key].forEach(item => {
                store.createIndex("ix_" + item.indexName, item.indexName, {
                    unique: item.unique
                });
            })
        }
    }
    //建立完畢後,把db關掉,不然後面用localForage會出問題。
    db.close();
};

到這步,初始化的索引我們就加完了,也不會影響localForage的使用。現在就是取資料了。

封裝一個通過索引取值的方法就可以了。

順便給大家推薦一個個人覺得比較好用的介面管理工具,apipost,可以完美替代postman。

相關文章