Skip to content

[Bug] driver-memory 在 MSW/浏览器未持久化到 localStorage,导致刷新丢数据 #991

@hotlong

Description

@hotlong

[Bug] InMemoryDriver 在 MSW 浏览器模式下未持久化到 localStorage

问题描述
objectstack-ai/objectui 仓库内,driver-memory 在 MSW 模式下运行于浏览器时,数据"应该"自动持久化到 localStorage,但实际情况是每次刷新页面数据丢失。

调试发现,浏览器 localStorage 中没有 objectstack:memory-db 键,说明 @objectstack/driver-memory 的持久化适配器未生效。

根因分析

  • InMemoryDriver 的 localStorage 持久化需要在构造后显式执行 driver.connect() 才会初始化 initPersistence() 并从 localStorage 恢复历史数据。
  • 当前 MSW mock 代码中,createKernel.ts 没有调用 driver.connect(),并且种子数据直接写入 db,绕过了本地持久化链路。

复现路径

  1. 访问 https://demo.objectui.org/apps/crm_app/account/record/6
  2. 在浏览器刷新页面后,所有数据全部丢失,localStorage 无 objectstack:memory-db

预期行为

  • 数据应持久化到 localStorage,在页面刷新后不会丢失。

建议修复方案

  1. apps/console/src/mocks/createKernel.ts 的 kernel/driver 初始化后,显式调用 await driver.connect(),确保持久化适配器生效;
  2. 在 seed 数据写入(如 syncDriverIds/patchDriverCreate)后,额外调用 driver.flush()persistenceAdapter.save(db),保证本地数据落盘;

关键参考实现(spec 仓库)


相关修复 Task

  • createKernel.ts 显式调用 await driver.connect()
  • 种子数据写入后调用 driver.flush() 或直接 save db
  • 验证 localStorage 已有 objectstack:memory-db 且刷新的数据不会丢失

如需 cross-repo issue(spec 仓库),请补充 driver/persistence 相关通用文档/注释。

Metadata

Metadata

Labels

bugSomething isn't working

Type

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions