PouchDB-懒散地获取和复制文档
PouchDB - Lazily fetch and replicate documents
TL;DR:我想要一个类似Ember Data的PouchDB数据库:首先从本地存储中提取,如果找不到,则转到远程。在这两种情况下,只复制该文档。
我在PouchDB/CouchDB服务器中有一个名为Post
的文档类型。我希望PouchDB查看本地存储,如果它有文档,则返回文档并开始复制。如果没有,请转到远程CouchDB服务器,获取文档,将其存储在本地PouchDB实例中,然后开始仅复制该文档在这种情况下,我不想复制整个数据库,只想复制用户已经获取的东西
我可以通过写这样的东西来实现:
var local = new PouchDB('local');
var remote = new PouchDB('http://localhost:5984/posts');
function getDocument(id) {
return local.get(id).catch(function(err) {
if (err.status === 404) {
return remote.get(id).then(function(doc) {
return local.put(id);
});
}
throw error;
});
}
这也不能处理复制问题,但这是我想要做的事情的大致方向
我想我可以自己写这段代码,但我想知道是否有一些内置的方法可以做到这一点。
不幸的是,您所描述的并不完全存在(至少作为一个内置函数)。使用上面的代码(这是完美的BTW:),您肯定可以从本地回退到远程,但local.put()
会给您带来问题,因为本地文档最终会使用与远程文档不同的_rev
,这可能会在以后的复制中造成混乱(这将被解释为冲突)。
您应该能够使用{revs: true}
获取具有修订历史记录的文档,然后使用{new_edits: false}
插入以正确复制丢失的文档,同时保留修订历史记录(这是复制器在后台所做的)。看起来是这样的:
var local = new PouchDB('local');
var remote = new PouchDB('http://localhost:5984/posts');
function getDocument(id) {
return local.get(id).catch(function(err) {
if (err.status === 404) {
// revs: true gives us the critical "_revisions" object,
// which contains the revision history metadata
return remote.get(id, {revs: true}).then(function(doc) {
// new_edits: false inserts the doc while preserving revision
// history, which is equivalent to what replication does
return local.bulkDocs([doc], {new_edits: false});
}).then(function () {
return local.get(id); // finally, return the doc to the user
});
}
throw error;
});
}
这应该行得通!如果有帮助,请告诉我。
相关文章:
- 使用promise和mongoose对文档进行排序
- document.open/document.write没有正确地清除chrome中的文档——这是chrome的错误吗
- Ajax请求文档就绪会导致jquery加载缓慢
- 当文档准备就绪时,将数据从一个文本框复制到另一个
- 复制和修改元素,以便在html文档的另一部分使用它们
- Indesign:将单元格样式复制到新文档
- 如何使用JavaScript API将Google云端硬盘文档从一个文件夹复制到另一个文件夹
- PouchDB-懒散地获取和复制文档
- 在HTML文档中复制HTML元素和内容
- JQuery使用ajax复制javascript到文档
- 当我通过循环运行返回的元素集合时,JavaScript正在复制文档get方法返回的元素
- 程序复制文件到另一个文档库
- 我如何从模板节点复制并填充json数据,并用javascript将它们附加到文档中
- 如何使用任何命令行工具或脚本将Word文档内容复制到Google Docs
- JS/GAS: For循环加速从电子表格单元格复制,用value替换文档占位符
- 如何通过javascript复制HTML文档
- PouchDb通过蓝牙复制文档
- 从原始文档复制HTML到弹出窗口(使用JQuery)
- 文档.execCommand复制命令不工作或其他解决方案
- 如何复制HTML文档并根据所选内容编辑副本,而不更改原始文档