【问题标题】:Read only replication of remote pouchdb远程 pouchdb 的只读复制
【发布时间】:2017-07-04 20:10:22
【问题描述】:

我想要一个本地浏览器数据库,它可以从远程源更新自身。我正在尝试使用 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 用户具有写入权限,则错误就会消失。有什么想法吗?

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

【问题讨论】:

  • 似乎修复可能是向nobody用户添加_replicator权限

标签: pouchdb cloudant


【解决方案1】:

您看到的错误是 PouchDB 试图将“检查点”文档写入远程 Cloudant 数据库。检查点标记了客户端在修订时间线中到达的位置,从而使未来的复制更加高效,因为它们可以从中断的地方继续。

您正确地推测为只读复制解决此问题的方法是向用户(或所有人)授予“_reader”和“_replicator”权限。 _replicator 权限允许 写入本地文档,而不是核心文档本身。这足以保存检查点文档并让 PouchDB 继续进行而不会出现任何错误。

【讨论】:

    猜你喜欢
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 2018-02-24
    • 2021-03-12
    相关资源
    最近更新 更多