只读远程pouchdb的复制

时间:2017-06-12 09:22:38

标签: pouchdb cloudant

我想在浏览器数据库中有一个本地,它可以从远程源更新自己。我试图使用pouchdb / cloudant来解决这个问题。远程数据库由许多客户端使用,因此应该是只读的,不需要身份验证。在cloudant中,我对相关数据库的权限配置(例如" remoteDB")如下:

{"cloudant":{"admin_user":["_writer","_admin","_replicator","_reader"],"nobody":["_reader"],"apiKey":["_writer","_admin","_replicator","_reader"]}}

在我的设置代码中,我有以下内容:

var localDB = new PouchDB('local');
var remoteDB = new PouchDB('https://account.cloudant.com/remoteDB');

localDB.replicate.from(remoteDB, {live: false}).on('change', function (change) {
  console.log("change", change);
}).on('error', function (err) {
  console.log("err-replicate", err);
});

我在加载包含此内容的页面时收到401未经授权的错误。导致这种情况的请求是PUT请求:

https://account.cloudant.com/remoteDB/_local/JqXQso2dZEjdZsU1e_2Qxw==

标题参数是:

  • _id:_local / JqXQso2dZEjdZsU1e_2Qxw ==
  • last_seq:" 0"

如果我拥有cloudant中的nobody用户,则此DB具有写入者权限,则错误消失。有什么想法吗?

这是从远程源进行单向复制的正确方法吗?

1 个答案:

答案 0 :(得分:1)

您看到的错误是PouchDB尝试编写" checkpoint"文档到远程Cloudant数据库。检查点标记了客户在修订时间表中所处的位置,使未来的复制更加高效,因为它们可以从中断处继续。

你正确地猜测,为只读复制解决这个问题的方法是grant" _reader" &安培; " _replicator"对用户(或每个人)的权限。 _replicator权限允许仅写入 本地文档,而不是核心文档本身。这足以允许保存检查点文档并使PouchDB继续运行而不会出现任何错误。