我正在構建一個具有脫機功能的web應用程序。我正在使用webcache
和pouchDB
的組合來實現它。PouchDB損壞檢測
目前我正在測試數據庫損壞的恢復機制。我的前提是,由於pouchDB在客戶端運行,因此它暴露給任何錯誤或故意會損壞數據庫的人。也可能是如果出現錯誤或類似情況,數據庫可能會損壞。然後,如果數據庫被損壞,除非它被web應用程序檢測到並清理乾淨,否則這將無法正常工作。
測試很簡單: - 創建PouchDB:
var dbOptions = { auto_compaction : false, cache : false }; var db = new PouchDB('myDB',dbOptions);
- 隨着開發工具刪除數據庫的一部分。
- 在加載應用程序嘗試讀取所有文件:
db.allDocs({include_docs : true}, function(_err,_response){ (certain code here) }
正是在這一點上,當"Uncaught TypeError: Cannot set property '_rev' of undefined "
被拋出。我試圖捕獲異常並使用pouchDB提供的承諾,但沒有一個能夠工作。
你們有沒有人有類似的問題?你是如何解決它的?
編輯: 當PouchDB返回500內部錯誤,應用程序應該如何從它恢復?我試圖破壞數據庫
db.destroy(function(err,info){console.log(err||info);}
,但它不工作。它也返回500內部錯誤。
其實我試圖破壞數據庫來測試如何從中恢復。我只是不相信人們/瀏覽器/ buggy代碼可能會對數據庫做什麼。另一方面,我可以通過在與couchDB實例連接時運行db.destroy()來獲取損壞的數據庫(Uncaught NotFoundError:未能在'IDBTransaction'上執行'objectStore':找不到指定的對象存儲區) (couchappy)。我認爲如果正在進行的同步在同一時間發生,這可能會發生,但我還沒有證明它。 至少在囊袋版本2.1.0和2.2.0。 – tup
我將執行更多測試並嘗試獲取有關此問題的事實。 – tup
好的,如果你有更多的信息,請在https://github.com/pouchdb/pouchdb/issues上提出問題。 – nlawson