You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PouchDB复制CouchDB一段时间后报错:JSON第0位出现意外令牌<

问题原因

报错中提到JSON第0位出现意外令牌<,本质是_bulk_docs接口返回的不是预期的JSON格式响应,而是HTML格式的错误页面,具体可归为以下几类原因:

  • 反向代理/负载均衡的请求大小限制:PouchDB复制时会将多份文档打包为单次_bulk_docs请求提交,你的源库总大小16.6MB,默认配置下次批量请求的大小很容易超过Nginx、Apache这类反向代理设置的请求体上限,代理直接返回413请求过大的HTML错误页,触发JSON解析失败。
  • 网关超时限制:大批次的写入请求处理时间较长,超过了反向代理配置的读写超时阈值,代理提前返回504超时的HTML错误页,也会触发该报错。
  • CouchDB默认配置限制:CouchDB 3.1.0默认的max_http_request_size为16MB,你的源库总大小刚好超过该阈值,大批次请求会被CouchDB直接拦截返回错误页面。
可行解决方案
  • 调整PouchDB复制参数:调用replicate方法时传入批量参数,调小单次同步的文档数量,降低单次_bulk_docs请求的大小,参考修改后的代码:
try {
  await PouchDB.replicate(sourceDB, targetDB, {
    batch_size: 30, // 可根据测试结果调整,数值越小单次请求数据量越低
    batches_limit: 5 // 配合调整并行处理的批次数量
  });
  console.log(`Replication complete!`);
} catch (err) {
  console.error(`Replication failed with error ${err}`);
  throw err;
}
  • 调整反向代理配置:如果你在CouchDB前部署了反向代理,对应调大请求体上限和超时阈值,以Nginx为例,修改配置如下:
client_max_body_size 64M; # 允许的请求体最大大小,建议设置为不低于源库总大小的2倍
proxy_read_timeout 300s; # 读写超时调整为5分钟,可按需延长
proxy_send_timeout 300s;
  • 调整CouchDB配置:修改CouchDB的local.ini配置文件,调大请求大小阈值,配置如下:
[httpd]
max_http_request_size = 67108864 ; 设为64MB,可根据实际场景调整
[couchdb]
max_document_size = 16777216 ; 按需调大单个文档的大小上限

修改配置后重启CouchDB服务即可生效。

内容的提问来源于stack exchange,提问作者Buddyshot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:27:03