无法使用 PouchDB 将本地 IndexedDB 复制到远程 CouchDB

Fail to replicate a local IndexedDB to a remote CouchDB using PouchDB

我在 Ionic 项目 (Ionic 4.0.5) 中使用 PouchDB 7.0.0。

在提供程序中,我定义了本地和远程数据库:

@Injectable()
export class DatabaseProvider {

  constructor() {
    this.db = new PouchDB("mydb");
    this.remote = new PouchDB("http://<my_server_running_couchdb>/<remote_db_name>")

  }

本地数据库作为 IndexedDB 实例存在于 Chrome 浏览器中。但是,这个问题也出现在 Firefox 中,因此看起来不像浏览器是罪魁祸首。

远程数据库最初是空的,在 CouchDB 2.1.2 上运行。它已经在我的服务器上创建,没有设置管理员或成员,所以它应该是 public 并允许未经身份验证的请求。顺便说一句,CORS 也已启用。

在同一个提供程序中,我还定义了一个触发从本地数据库到远程节点的复制的方法:

  replicateLocalDBToRemote() {
    console.log("Replicating database...");
    this.db.replicate.to(this.remote).then(() => {
      console.log("Celebrate");
    }).catch(error => {
      console.error(error)
    })
  }

下面是对 replicateLocalDBToRemote 的调用向我抛出的内容

CustomPouchError {__zone_symbol__currentTask: e, result: {…}}
result:
doc_write_failures: 0
docs_read: 0
docs_written: 0
end_time: "2018-11-21T16:23:36.974Z"
errors: []
last_seq: 0
ok: false
start_time: "2018-11-21T16:23:36.874Z"
status: "aborting"

恐怕我不能将此称为不言自明的消息。

猜猜问题的根本原因是什么?

编辑: 在 github 上搜索 PouchDB 存储库后,我发现 this entry 可能涉及相同的问题。

我通过允许流量通过我的远程 CouchDB 服务器上的端口 5984 解决了这个问题。

问题是,在端口 80 上发送请求(即 GET http://<my_server>.com/mydb确实会 发回一些数据,所以我从一开始就懒得尝试使用端口 5984因为我认为 API 也是在端口 80 上实现的...

所以至少我的问题与 PouchDB 无关,但我希望错误消息更具体一些。