WatermelonDB同步报错:Cannot read property '_resetCount' of undefined
解决WatermelonDB同步报错"Cannot read property '_resetCount' of undefined"
这个错误的核心原因是你不需要手动在自定义表中添加_resetCount字段——这是WatermelonDB内部_syncStatus系统表的专属字段,用户自定义表完全不需要处理它。同步还没发起请求就报错,说明本地数据库初始化或同步依赖的内部状态存在问题,按以下步骤排查:
1. 移除自定义表和模型中的_resetCount代码
先把你手动添加的相关代码全部删掉:
- 从
requests表的schema中移除{ name: '_resetCount', type: 'number' } - 从
Request模型中移除@field('_resetCount') resetCount;
2. 验证数据库实例初始化是否正确
确保传入synchronize的database是完全初始化且配置正确的实例,比如你的数据库初始化代码应该类似这样:
import { Database } from '@nozbe/watermelondb'; import SQLiteAdapter from '@nozbe/watermelondb/adapters/sqlite'; import yourSchema from './path/to/your/schema'; import Request from './models/Request'; // 导入其他所有自定义模型 const adapter = new SQLiteAdapter({ schema: yourSchema, dbName: 'your_app_db', // 你的数据库名称 // React Native 下如果有迁移逻辑,需添加对应配置 }); const database = new Database({ adapter, modelClasses: [Request], // 必须包含所有自定义模型 actionsEnabled: true, }); export default database;
检查点:
- 所有自定义模型都已注册到
modelClasses数组中 - adapter的
schema参数正确指向你的完整schema(包含所有自定义表) - 确保在调用
synchronize前,数据库已经完成初始化(比如React Native中不要在组件挂载前过早调用同步)
3. 核对同步配置与schema版本
确保synchronize中的migrationsEnabledAtVersion值不大于你的schema版本:
- 如果你的schema版本是
1,那migrationsEnabledAtVersion: 1是正确的 - 后续升级schema版本时,需要同步调整这个值,同时确保迁移逻辑正确
4. 重置本地数据库
之前的错误操作可能导致数据库结构损坏,完全重置后再测试:
- React Native:卸载重装应用,或者通过adb/iOS模拟器删除数据库文件
- Web:清除浏览器本地存储(IndexedDB)
完成以上步骤后重新调用同步函数,应该就能解决这个初始化阶段的报错。
内容的提问来源于stack exchange,提问作者Protonos
相关产品推荐
相关产品推荐

