【问题标题】:Pouchdb not syncing when there are attachments有附件时 Pouchdb 不同步
【发布时间】:2019-02-11 18:06:26
【问题描述】:

当我使用带有带有附件的文档的远程 couchdb 初始化本地 pouchdb 时,我的同步失败。

以下是错误:

pouchdb:api http://10.0.0.0:3000/db +14ms getAttachment error TypeError: response.buffer is not a function
    at index-browser.es.js:7100
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:391)
    at Object.onInvoke (core.js:17289)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invoke (zone.js:390)
    at Zone.push../node_modules/zone.js/dist/zone.js.Zone.run (zone.js:150)
    at zone.js:889
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:423)
    at Object.onInvokeTask (core.js:17280)
    at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (zone.js:422)
    at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (zone.js:195)
browser.js:133 pouchdb:api http://10.0.0.0:3000/db +2s id

我正在使用 pouchdb-find 来查询文档。

感谢您的帮助

【问题讨论】:

  • 您的错误似乎与 PouchDb 没有任何关系。据我所知,PouchDb 不使用zone.js,但错误是由该产品引起的。在任何人可以帮助您之前,您需要显示调用同步的代码。顺便说一句,我编辑了您的问题以使其更易于阅读。格式良好的问题比杂乱的问题更容易获得帮助。
  • 另外:Zones 是一个相当新的和非常先进的工具包。我怀疑 PouchDB 是否已经过兼容性测试。你应该避免使用区域,除非你能准确地解释你为什么需要它。
  • 令我惊讶的是日志来自 pouchdb:api。我已经删除了 zone 的使用,但我仍然遇到他的问题
  • 我已经删除了 zone 的使用,但我仍然遇到他的问题。好像真的出现在sync方法里了,我什么都没做。

标签: pouchdb


【解决方案1】:

经过调查,我通过修改 pouchdb 库中 index-browser.es.js 文件的 index-browser.es.js 使同步工作。 我已经更改了第 7100 行替换

if (typeof process !== 'undefined' && !process.browser) {
  return response.buffer();
}

if (typeof process !== 'undefined' && !process.browser) {
  return response.blob();
} 

并评论第 7109 行

if (typeof process !== 'undefined' && !process.browser) {
    //blob.type = contentType;
}

这可能是一个肮脏的解决方法,但我想了解为什么会发生这种情况以及如何正确解决它。

谢谢

【讨论】:

  • 为什么 process.browser 未定义?
  • 我终于找到了这个问题的根本原因。为了使 pouchdb-find 工作,我必须在我的 polyfills.ts 文件中添加它: (window as any).global = window;但我看到这篇文章stackoverflow.com/a/50645663/10978653 并添加了 (window as any).global = window;(window as any).process = {};(window as any).process.nextTick = setTimeout;这解释了为什么进程未定义
  • 出色的调查。做得好。我认为您应该更新您的答案,以使该问题的未来受害者更容易快速了解如何处理它。 [很高兴知道这是一个 Angular 问题......我使用 VueJs ;-) ]
猜你喜欢
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 2018-10-28
  • 1970-01-01
  • 2017-08-25
  • 2017-10-05
  • 1970-01-01
相关资源
最近更新 更多