我在Ionic项目中使用PouchDB 7.0.0(Ionic 4.0.5(。
在提供者中,我定义了本地和远程数据库:
@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上运行。它已经在我的服务器上创建,没有设置管理员或成员,所以它应该是公共的,并允许未经身份验证的请求。顺便说一下,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"
恐怕我不能称之为不言自明的信息。
有人猜测这个问题的根本原因是什么吗?
EDIT:在github上浏览PouchDB repo后,我发现了可能涉及相同问题的条目。
我允许通过远程CouchDB服务器上的端口5984进行通信,从而解决了这个问题。
问题是,在端口80(即GET http://<my_server>.com/mydb
(上发送请求确实会发送回一些数据,所以我一开始就不想尝试端口5984,因为我认为API也在端口80上实现…
所以,至少我的问题与PouchDB无关,但我希望错误消息更具体一点。