You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo React Native中TypeORM无法保存实体至SQLite数据库

解决Expo + TypeORM SQLite数据保存卡住的问题

针对你遇到的TypeORM无法保存数据、操作卡住无响应的情况,给你几个具体的排查和解决方向:

1. 补全实体必填字段值

你的Wallet实体中amount字段使用@Column()默认标记为必填,但你创建的wallet对象仅设置了accountId、name、id,未给amount赋值。TypeORM在处理必填字段缺失时,可能出现静默阻塞或无明确报错的失败情况。

两种修改方式:

  • 直接给wallet对象补充amount值:
    wallet.id = body.id;
    wallet.amount = 0; // 或从后端返回的body中获取对应值
    
  • 若amount允许为空,修改实体字段配置:
    @Column({ nullable: true })
    amount: number;
    

2. 统一异步语法,改用await处理保存操作

你在async函数中混用了await和then/catch,可能导致Promise未被正确处理,出现卡住情况。统一使用await配合try/catch来捕获错误:

console.log("SAVING");
try {
  const res = await walletRepo.save(wallet);
  console.log("保存结果:", res);
} catch (err) {
  console.log("保存失败:", err);
}

3. 给DataSource初始化添加错误捕获

当前代码中dataSource.initialize()未做错误处理,如果初始化过程中出现问题(比如实体定义错误、数据库创建失败),会导致后续Repo操作无响应。添加try/catch排查初始化是否失败:

if (!dataSource.isInitialized) {
  try {
    const source = await dataSource.initialize();
    walletRepo = source.getRepository(Wallet);
    console.log("数据库初始化成功");
  } catch (initErr) {
    console.log("数据库初始化失败:", initErr);
    return; // 初始化失败直接终止后续操作
  }
}

4. 检查其他实体的定义合法性

你的DataSource配置中加载了User和Financial实体,如果这两个实体存在语法错误(比如装饰器使用错误、字段类型不匹配),会导致整个数据库连接初始化异常,间接影响Wallet的操作。请确认这两个实体的定义符合TypeORM规范。

5. 验证数据库表是否正确创建

由于你设置了synchronize: true,TypeORM会自动创建数据库表。可以通过Expo的SQLite调试工具查看test_db_local数据库是否存在,以及wallet表是否被正确生成。如果表未创建,说明实体加载或DataSource配置存在问题。

内容的提问来源于stack exchange,提问作者Vitor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:33:27