我正在使用 Pouchdb 和 Cloudant,当我的 Web 应用程序启动时,它会在浏览器中从 Cloudant 复制到我的 pouchdb。我对 pouchdb 内部的工作方式有所了解,这就是我认为该过程的工作方式(高级):
- 复制开始
- 从 cloudant db 获取检查点文档(包含从服务器检索的最新序列号,如果不存在,则假定序列号为 0,这是我的情况)
- 从从该序列号开始释放的更改中获取更改(最多获取 25 个更改)
- 使用新的序列号将检查点文档写入(或更新)回 Cloudant 服务器(这样,如果发生网络错误,它可以从中断处继续或进行下一次复制)
- 重复直到没有变化
- 复制完成
问题出在第 4 步,当 pouch 尝试将该文档写入 cloudant 服务器(第一次)时,服务器返回“case_clause”错误。我认为问题可能是发送到 cloudant 的 id 无效(cloudant 不接受这种格式的 id),因为写入服务器的文档的 id 是_local/799c37dfaefb3774a04f55c7f8cee947
(或最后的其他随机数和字符)。我不知道这是否是有效的文档 ID(对于 cloudant,因为这对于 pouchdb 是准确的),所以我想我在问,是这个问题(cloudant 的不可接受的 id),还是有一些基于 cloudant 服务器返回的错误的其他问题。
这是正在编写的文档:
{ _id: "_local/799c37dfaefb3774a04f55c7f8cee947", last_seq:“63” }
以下是 Chrome 调试器的完整错误输出:
{ 错误:“case_clause” 原因:“{{case_clause,{ok,{error,[{{doc,>, {338, [>]}, {[{>,>}]}, [],错误的,[]}, {error,internal_server_error}}]}}}, [{fabric,update_doc,3},{chttpd_db,'-update_doc/6-fun-0-',3}]}" 堆栈:数组[4] 0:“chttpd_db:update_doc/6” 1:“chttpd:handle_request/1” 2:“mochiweb_http:headers/5” 3:“proc_lib:init_p_do_apply/3” 长度:4 __proto__: 数组[0] 状态:500 }
注意:当我进入 cloudant 的被褥并使用其 id 手动输入检查点文档的 url 时,它不存在。
谢谢
编辑:
使用 Chrome 调试器的上述请求的标头信息:
请求网址:http://lessontrek.toddbluhm.c9.io/db/ilintindingreseseldropec/_local%2F799c37dfaefb3774a04f55c7f8cee947 请求方法:PUT 状态码:500 内部服务器错误 请求标头视图已解析 PUT /db/ilintindingreseseldropec/_local%2F799c37dfaefb3774a04f55c7f8cee947 HTTP/1.1 主持人:lessontrek.toddbluhm.c9.io 连接:保持活动 内容长度:111 接受:应用程序/json 来源:http://lessontrek.toddbluhm.c9.io 用户代理:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36 内容类型:应用程序/json 推荐人:http://lessontrek.toddbluhm.c9.io/app 接受编码:gzip、deflate、sdch 接受语言:en-US,en;q=0.8 Cookie:connect.sid=s%3A8MVBFmbizTX4VNOqZNtIuxQI.TZ9yKRqNv0ePbTB%2FmSpJsncYszJ8qBSD5EWHzxQYIbg;AuthSession=(出于安全目的已删除,但有效);db_name=ilintindingreseldropec;__utma=200306492.386329876.1368934655.1375164160.1375252679.55; __utmc=200306492; __utmz=200306492.1372711539.22.2.utmcsr=google|utmccn=(有机)|utmcmd=有机|utmctr=(未提供%20); c9.live.proxy=(出于安全目的已删除,但有效) 请求 Payloadview 解析 {"_id":"_local/799c37dfaefb3774a04f55c7f8cee947","last_seq":"63","_rev":"338-7db9750558e43e2076a3aa720a6de47b"} 响应标头视图已解析 HTTP/1.1 500 内部服务器错误 x-powered-by: Express 变化:接受编码 x-couch-request-id: 7d2ca9fc 服务器:CouchDB/1.0.2 (Erlang OTP/R14B) 日期:2013 年 7 月 31 日星期三 07:29:23 GMT 内容类型:应用程序/json 缓存控制:必须重新验证 内容编码:gzip 传输编码:分块 通过:1.1 项目-livec993c2dc8b8c.rhcloud.com (node-web-proxy/0.4) X-C9-Server:proxy_subdomain_collab-bus2_01