我从 watermelondb 文档中实现了基本的 syc 示例,并遇到了这个问题,我在任何地方都找不到任何内容。 示例片段 在发出任何请求之前,如果没有执行任何推/拉操作,同步请求似乎会失败。 可能是我的表结构搞乱了一切,但文档根本没有多大帮助。
示例片段:
import { synchronize } from '@nozbe/watermelondb/sync'
async function mySync() {
await synchronize({
database,
pullChanges: async ({ lastPulledAt, schemaVersion, migration }) => {
const urlParams = `last_pulled_at=${lastPulledAt}&schema_version=${schemaVersion}&migration=${encodeURIComponent(
JSON.stringify(migration),
)}`
const response = await fetch(`https://my.backend/sync?${urlParams}`)
if (!response.ok) {
throw new Error(await response.text())
}
const { changes, timestamp } = await response.json()
return { changes, timestamp }
},
pushChanges: async ({ changes, lastPulledAt }) => {
const response = await fetch(`https://my.backend/sync?last_pulled_at=${lastPulledAt}`, {
method: 'POST',
body: JSON.stringify(changes),
})
if (!response.ok) {
throw new Error(await response.text())
}
},
migrationsEnabledAtVersion: 1,
})
}
4 个表中的一个看起来像这样:
tableSchema({
name: 'requests',
columns: [
// Fails with and without this collumn
{ name: '_resetCount', type: 'number' },
{ name: 'created_at', type: 'number' },
{ name: 'updated_at', type: 'number' },
{ name: 'request_id', type: 'number' },
{ name: 'request_created_at', type: 'number', isOptional: false },
{ name: 'sender_auth_id', type: 'string' },
{ name: 'target_auth_id', type: 'string' },
{ name: 'status', type: 'string' },
]
}),
以及对应型号:
class Request extends Model {
static table = 'requests';
@readonly @date("created_at") createdAt;
@readonly @date("updated_at") updatedAt;
// again fails with and without this line
@field('_resetCount') resetCount;
@field('request_id') requestId;
@field('request_created_at') requestCreatedAt;
@field('sender_auth_id') senderAuthId;
@field('target_auth_id') targetAuthId;
@field('status') status;
}
我尝试添加/删除列、重置应用程序和数据库,但无法解决这个问题。 文档根本没有帮助
确保您已正确设置所有导入! Watermelondb 还不是成品,如果您在这方面犯了任何错误,它不会警告您。 (已解决)