Bmob 的报错由三个独立编号空间组成:
code 字段,所有 SDK 的网络错误本质都是这个)> 关键诊断流程:拿到错误后先看是不是网络错误(看响应体里有没有 { "code": ..., "error": "..." }),如果是,按 REST API 错误码表查;如果没有响应体只有 SDK 抛出的本地 code(9xxx 或 2xxxx),按 SDK 本地表查。
| 码 | 含义 | 常见原因 / 修复 |
|---|---|---|
| --- | --- | --- |
| 9001 | Application Id 为空 | 没调用 Bmob.initialize(context, "AppId");检查初始化时机是否在用 SDK 之前 |
| 9002 | 解析返回数据出错 | 服务端返回非预期 JSON;查看原始 HTTP 响应 |
| 9003 | 上传文件出错 | 文件路径、权限、网络任一问题 |
| 9004 | 文件上传失败 | 同 9003,常配合 9022 |
| 9005 | 批量操作超过 50 条 | Bmob 单次批量上限 50;拆分多次调用 |
| 9006 | objectId 为空 | 更新/删除/获取单条时没传 objectId |
| 9007 | 文件大小超过 10M | 单文件限制 10MB;大文件分片或迁到其它服务 |
| 9008 | 上传文件不存在 | 路径错误,或文件被异步删除 |
| 9009 | 没有缓存数据 | 启用了 CACHE_ONLY 策略但缓存为空 |
| 9010 | 网络超时 | 排查移动网络、服务端响应时间 |
| 9011 | BmobUser 类不支持批量操作 | 用户表只支持单条注册/登录 |
| 9012 | 上下文为空 | Bmob.initialize 传了 null context |
| 9013 | 表名格式不正确 | 表名必须字母开头,仅含字母/数字/下划线 |
| 9014 | 第三方账号授权失败 | 第三方 OAuth 流程中断 |
| 9015 | 其他错误(兜底码) | 关键:必须读响应体的 error 文本判断;详见下方"9015 专题" |
| 9016 | 无网络连接 | 客户端网络不可用,跟 9010 不同 |
| 9017 | 第三方登录错误 | 看响应描述 |
| 9018 | 参数不能为空 | 必传字段空 |
| 9019 | 格式不正确:手机号 / 邮箱 / 验证码 | 客户端格式校验失败 |
| 9020 | 保存 CDN 信息失败 | 上传到 CDN 后写记录失败 |
| 9021 | 文件上传缺少 WAKE_LOCK 权限 | AndroidManifest.xml 加 |
| 9022 | 文件上传失败请重试 | 通常是网络抖动 |
| 9023 | 请调用 Bmob.initialize 初始化 SDK | 同 9001,但触发点不同 |
9015 是 Android SDK 的兜底错误码——所有未明确分类的异常都返回它。处理它必须看响应体的描述字段,不能只看 code。
特别警示:如果你在 Bmob SDK 的 success 回调里调用业务方法抛了异常,SDK 会把这个异常捕获并以 9015 形式触发 error 回调,造成"done 看似被调了两次"的错觉。修复方案是在业务方法里加 try/catch。
| 码 | 含义 |
|---|---|
| --- | --- |
| 100 | 请求内容有误(查询条件错) |
| 20000 | 密码为空(登录/注册) |
| 20001 | 用户名为空 |
| 20002 | 请求失败 |
| 20003 | 缺 objectId(更新/删除/查询单条) |
| 20004 | 查询结果为空 |
| 20005 | 缓存查询过期 |
| 20006 | 云函数调用失败 |
| 20008 | 上传文件 filename 为空 |
| 20009 | 上传文件不存在 |
| 20010 | 未知错误 |
| 20011 | 上传文件内容为空 |
| 20012 | 更新内容为空 |
| 20013 | 云函数名为空 |
| 20014 | 批量数组超界 |
| 20015 | 批量数组为空 |
| 20016 | 推送内容为空 |
| 20017 | 初始化未完成 |
| 20023 | 初始化失败 |
| 20024 | 批量文件上传格式错误 |
| 20025 | 表名为空 |
| 20027 | 参数有错(一般是空字符串) |
| 20028 | 非法手机号 |
| 20029 | 非法验证码 |
| 20030 | 文件不存在(删除 / 获取 URL) |
{ "error": "unauthorized" }
| HTTP | 常见含义 |
|---|---|
| --- | --- |
| 401 | Application Id / REST API Key / 加密授权签名有问题 |
| 500 | 服务端临时故障,稍后重试 |
{ "code": 101, "error": "object not found for e1kXT22L" }
对象 / 查询 / Class(100–199)
| code | 含义 | 修复建议 |
|---|---|---|
| --- | --- | --- |
| 101 | object 不存在 / 用户名密码错误 | 检查 objectId;登录失败时不区分用户名错 vs 密码错(安全设计) |
| 102 | 字段名/字段值无效 / GeoPoint 格式错 | 字段名大小写敏感,必须字母开头 |
| 103 | 缺 objectId 或 class 名非法 | class 名同字段命名规则 |
| 104 | 关联 class 不存在 | 创建 Pointer/Relation 前先建目标表 |
| 105 | 字段名非法或是保留字段 | 保留字段:objectId / createdAt / updatedAt / ACL |
| 106 | Pointer 格式错 | 必须是 {"__type":"Pointer","className":"X","objectId":"..."} |
| 107 | JSON / 日期 / ACL / __op 格式错;Content-Type 错 | 见对应错误描述 |
| 108 | username + password 必填(注册/登录) | — |
| 109 | 缺登录信息 | — |
| 110 | 数据库迁移中,禁止 POST/PUT/DELETE | 等待迁移完成 |
| 111 | 字段值与类型不匹配 | get_project_tables 拿 schema 比对 |
| 112 | requests 必须是数组 | 批量接口入参 |
| 113 | requests 数组每项格式错 | { "method": "POST", "path": "...", "body": {...} } |
| 114 | requests 数组超过 50 项 | 拆分 |
| 117 | 纬度 / 经度越界 | lat ∈ [-90,90],lng ∈ [-180,180] |
| 118 | 缺必需参数 | 错误描述里有参数名 |
| 120 | 邮箱认证功能未开 | 控制台 → 应用设置开启 |
| 121 | API 调用次数超套餐限制 | 升级套餐或等待重置 |
| 122 | 用户权限验证失败 | 检查 ACL / Role 配置 |
| 125 | 默认值 JSON 格式错 | — |
推送 / 设备(131–141)
| code | 含义 |
|---|---|
| --- | --- |
| 131 | device token / installation ID / deviceType 无效 |
| 132 | device token 或 installation ID 已存在 |
| 136 | 字段不可改 / Android 不需要 deviceToken |
| 137 | 客户端不允许在 installation 类执行某操作 |
| 138 | 字段只读 / 此 App 禁止 SDK 删除 |
| 139 | 角色名格式错 / 已存在 |
| 141 | 推送数据缺失 |
时间 / 文件 / 图片(142–165)
| code | 含义 |
|---|---|
| --- | --- |
| 142 | 时间格式错(应为 2013-12-04 00:51:13) |
| 143 | 必须是数字 |
| 144 | 不能是过去时间 |
| 145–157 | 文件大小 / 名 / URL / 权限 / 删除 等各种错误 |
| 160–165 | 图片处理参数错(宽高边长等) |
用户系统(201–211)
| code | 含义 |
|---|---|
| --- | --- |
| 201 | 缺必需用户字段 |
| 202 | username 已被使用 |
| 203 | email 已被使用 |
| 204 | 必须提供 email |
| 205 | 未找到对应邮箱/用户名的用户 |
| 206 | 无权限操作用户表 — 应用初始化时请传 MasterKey(仅服务端) |
| 207 | 验证码错误 |
| 208 | 第三方授权数据错 / 已被其他用户关联 |
| 209 | mobilePhoneNumber 已被使用 |
| 210 | 旧密码不正确 |
| 211 | 用户未登录或登录已过期,需要重新登录 |
支付(232–236、10001–10006)
| code | 含义 |
|---|---|
| --- | --- |
| 232 | 支付服务不可用 |
| 233 | API 接口已停用 |
| 234 | 无支付权限,联系 Bmob 工作人员 |
| 235 | 获取支付权限失败 |
| 236 | 请在应用配置中填写支付相关信息 |
| 10001 | 支付参数缺失 |
| 10002 | order_no 不存在或不属于本应用 |
| 10003 | 支付相关错误 |
| 10004 | 盛付通支付错误 |
| 10005 | 盛付通支付存储错误 |
| 10006 | 需要专业版及以上套餐 |
云函数 / 钩子(310–324)
| code | 含义 |
|---|---|
| --- | --- |
| 310 | 调用云代码错误 |
| 311 | 云代码名格式错 |
| 312 | 缺云代码 |
| 313 | 更新云代码错 |
| 314 | 云代码不存在 |
| 315 | 删除云代码错 |
| 316 | 生成云代码文件错 |
| 317 | 容器调用失败 |
| 318 | Redis 写入云代码错 / 获取配置失败 |
| 319 | 获取云代码列表/详情失败 |
| 320 | 解析云代码错 |
| 321 | 代码含未支持的 JS 对象 |
| 322 | 更新 Java 云代码失败 |
| 323 | 删除 Java 云代码失败 |
| 324 | 数据 Hook 错误 |
| 330 | 推送服务需付费 |
其他
| code | 含义 |
|---|---|
| --- | --- |
| 401 | 唯一索引重复值 — create_table 时设了 unique:true 的字段写了已存在的值 |
| 402 | where 查询条件超字节限制 |
| 501 | 用户被禁止访问 |
| 601 | BQL 语句错误 |
短信(10010–10022)
| code | 含义 |
|---|---|
| --- | --- |
| 10010 | 该手机号发送已达限制 |
| 10011 | SDK 短信已用完 |
| 10012 | 实名 / 状态 / 截图审核相关 |
| 10013 | 短信内容非法 |
| 10014 | 短信内容含 URL |
| 10015 | 非法内容 |
| 10016 | deviceId 为空 / RESTful 短信已用完 |
| 10017 | 设备发送短信达限 |
| 10018 | smsId 不存在 |
| 10019 | 时间格式错(需 2006-01-02 15:04:05) |
| 10020 | 时间必须距今 > 10 分钟 / 未找到应用 |
| 10021 | 不允许自定义短信接口 |
| 10022 | 短信模板不存在 |
应用管理(10030–10042)
| code | 含义 |
|---|---|
| --- | --- |
| 10030 | 应用名必填 |
| 10031 | 创建应用失败 |
| 10032 | 应用名超 30 字符 |
| 10034 | 应用名必须是字符串 |
| 10035 | 字段值不正确 |
| 10037 | 创建应用达限 |
| 10038 | 更新应用信息失败 |
| 10039 | 应用名为空 |
| 10040 | 不允许 SDK 创建/删除列 |
| 10041 | 应用名不能以 _ 开头且 ≤ 20 字符 |
| 10042 | 文件名不能含反斜杠 |
Schema 管理(10061–10075)
| code | 含义 |
|---|---|
| --- | --- |
| 10061 | Master Key 错误 |
| 10062 | className 与路径不匹配 |
| 10063 | 字段名是保留字 |
| 10064 | 字段已存在 |
| 10065 | TargetClass 需要 className |
| 10066 | TargetClass 不存在 |
| 10067 | 保存表结构失败 |
| 10068 | 保存字段失败 |
| 10069 | 数据类型不存在 |
| 10070 | 不支持的操作 |
| 10071 | 字段不存在 |
| 10072 | 删除字段失败 |
| 10073 | 不允许修改用户表结构 |
| 10074 | 删除表结构失败 |
| 10075 | 唯一索引可能已存在 |
QPS / 配额(10076、10210)
| code | 含义 |
|---|---|
| --- | --- |
| 10076 | QPS 超出限制 — 客户端请求频率过高,加限流 |
| 10200 | 请求超时 |
| 10210 | 应用半小时内超请求数限制 |
flowchart TD
Start([拿到 Bmob 错误]) --> A{有 HTTP 响应体吗?}
A -->|有 code + error| B[REST API 服务端错误码表]
A -->|纯 SDK 本地抛出| C{Android or iOS?}
C -->|Android| D[9001-9023 表]
C -->|iOS| E[100, 20000-20030 表]
B --> F[读 error 字段的描述]
D --> F
E --> F
F --> G{描述里有变量 (%s, %d)?}
G -->|有| H[把变量值代入定位具体字段/资源]
G -->|没有| I[按表中"修复建议"操作]
H --> I
metadata.docs_raw 是 agent 可直接 WebFetch 的纯 markdown 版(原表里部分行带换行格式):
https://raw.githubusercontent.com/bmob/BmobDocs/master/mds/other/error_code/index.md
需要在 IDE 内复核某个不在本 skill 表内的码(例如 Bmob 未来新增),直接 fetch 该 URL 即可。
共 1 个版本