我正在构建一个具有脱机功能的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