Electron autoUpdater报错:更新检查失败,JSON响应无效求助
问题核心分析
你遇到的SQRLUpdaterErrorDomain code:6错误,本质是Electron更新模块无法正确解析服务端返回的JSON响应,结合返回内容,最可能的原因有两点:
1. URL字段缺少完整协议
返回的url值为backoffice-electron-updater-1auzox7wu-common-ground.vercel.app/download/darwin?update=true,属于无协议的相对地址。Electron autoUpdate要求更新包下载链接必须是带https://的完整绝对URL,缺少协议会导致模块无法识别有效下载路径,进而判定整个JSON响应无效。
2. 响应头Content-Type不符合要求
Electron更新模块仅会正确解析Content-Type为application/json的响应。如果Vercel上的Hazel服务返回的响应头中该字段缺失或被设为其他值(如text/plain),也会触发JSON无效的错误。
验证与解决步骤
步骤1:修复响应中的URL字段
修改Hazel服务返回的url值,补充完整的HTTPS协议,示例:
{"name":"v1.2.367","notes":"","pub_date":"2023-03-09T16:01:51Z","url":"https://backoffice-electron-updater-1auzox7wu-common-ground.vercel.app/download/darwin?update=true"}
若使用Vercel托管Hazel,需确认Hazel是否从GitHub Releases正确获取到带完整协议的下载链接——检查私有仓库Release中安装包的下载地址是否为完整HTTPS链接,同时确保配置的TOKEN拥有私有仓库的读取权限。
步骤2:验证响应头的Content-Type
用curl命令检查服务端响应头:
curl -I https://backoffice-electron-updater.vercel.app/update/darwin/1.2.366
确认输出中包含Content-Type: application/json。若缺失,需在Vercel的Hazel项目中配置响应头,确保返回正确的Content-Type。
步骤3:验证JSON格式的严格有效性
用curl获取完整响应并验证JSON语法:
curl https://backoffice-electron-updater.vercel.app/update/darwin/1.2.366 | jq .
若jq能正常解析并格式化输出,说明JSON语法无问题;若报错,需检查响应是否包含多余空格、换行或HTML内容(如Vercel的错误页输出)。
额外排查点
- 快速核对
autoUpdater.setFeedURL()配置的URL是否为完整有效地址(你已说明传入正确链接,此步可快速确认); - 由于使用M1芯片的macOS 13,确保更新包适配arm64架构(此点不会直接导致JSON无效错误,但会影响后续更新流程)。
内容的提问来源于stack exchange,提问作者silveur

