首页 > 解决方案 > PouchDB bulkdocs 不会重新添加带有 {new_edits:false} 的文档,如果它之前被删除

问题描述

本地 PouchDB 与远程 Couch 同步。遥控器具有根据某些规则引发未经授权的错误的验证。当denied事件发生时,我编写了以下代码来获取远程文档并在本地复制它,以便将本地文档更改恢复为它们在服务器上的状态 -

function processUnauthorizedError(err, self) {
  const { doc: { error, id } = {} } = err;
  if (error !== "unauthorized") {
    return;
  }

  // Replace/insert remote doc into local
  // https://stackoverflow.com/a/34570061/2790937
  return self.remoteDB.get(id, {revs: true})
    .then(doc => {
      Logger.log({doc});
      return self.localDB.bulkDocs([doc], {new_edits: false})
    })
    .then((result) => {
      Logger.log({result}); // Empty array, see https://github.com/pouchdb/pouchdb/issues/5775
      return notifyUnauthorized(id, self)
    })
}

此策略基于此建议 - https://stackoverflow.com/a/34570061/2790937。但是,如果文档在本地被删除,则 localdbbulkDocs操作不会将其插入回来。它没有错误地完成并返回空数组,这是本期预期的 - https://github.com/pouchdb/pouchdb/issues/5775。为了确认没有插入文档,我做了一个后续allDocs操作以及一个get本地操作。

有什么建议么?

该代码在最新的 Chrome (81) 中运行并使用最新的 PouchDB (pouchdb-browser) 7.1.1。

标签: couchdbpouchdb

解决方案


推荐阅读