【发布时间】:2014-04-17 21:05:20
【问题描述】:
Pouch DB 中是否支持 Couchbase Sync Gateway 的“通道”? 我希望能够让用户看到整体数据的一个子集,以及他们是否创建了新数据以便能够与他们共享的对象共享。
PouchDB 有可能吗?或者我是否必须直接与服务器交互或在移动设备上使用 couchbase lite?
【问题讨论】:
标签: couchbase pouchdb couchbase-sync-gateway
Pouch DB 中是否支持 Couchbase Sync Gateway 的“通道”? 我希望能够让用户看到整体数据的一个子集,以及他们是否创建了新数据以便能够与他们共享的对象共享。
PouchDB 有可能吗?或者我是否必须直接与服务器交互或在移动设备上使用 couchbase lite?
【问题讨论】:
标签: couchbase pouchdb couchbase-sync-gateway
只是一点点更新:现在可以实现了,PouchDB(从 V3.4.0 版本开始)现在与同步网关兼容。
在此处查看教程:http://blog.couchbase.com/first-steps-with-pouchdb--sync-gateway-todomvc-todolite
【讨论】:
这是使 pouch db 客户端通过用户通道与 Couchbase Sync Gateway 一起工作的解决方案:
var sync = function () {
var opts = {
live: true,
retry: true,
//-- from here
filter: "sync_gateway/bychannel",
query_params: {
"channels": channels
}
//-- to here
};
database.sync(syncServer, opts);
}
这里的关键是你只需按原样传递过滤器和 query_params,同步网关无论如何都有能力理解这个过滤器。
【讨论】:
这是一个使用频道的具体示例。
var db = new PouchDB("yep");
db.sync(new PouchDB("http://localhost:4984/beer-sample/"), {
live: true,
retry: true,
filter: "sync_gateway/bychannel",
query_params: {
channels: "channel-1,channel-2,channel-3,bar"
}
})
传递过滤器的名称以应用于源文档,目前唯一支持的过滤器是“sync_gateway/bychannel”,这将仅从命名通道集中复制文档。1
我们不传递数组,而是用逗号分隔它们。2
而在 Sync Gateway 中,您的同步功能可能如下所示(我的目的是让同步功能尽可能地愚蠢,以便您一眼就能理解我们如何在 PouchDB 中使用上述通道):
function sync(doc, oldDoc) {
if (doc.type == "beer") {
channel("channel-1");
} else if (doc.type == "soap") {
channel("channel-2");
} else if (doc.type == "sweets") {
channel("channel-3");
} else if (doc.type == "bar") {
channel(doc.type);
}
}
虽然晚了 6 年...但迟到总比没有好!
【讨论】: