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

Angular Ionic7中TypeORM初始化sqljs数据库报Database未定义错误

解决TypeORM在Angular Ionic浏览器端初始化SQLJS数据库的错误

错误原因

该错误源于TypeORM的SqljsDriver无法找到sql.js库中的Database类,通常是缺少依赖或配置不当导致的。

解决步骤

1. 安装必需依赖

先确保安装sql.js及其TypeScript类型定义:

npm install sql.js
npm install -D @types/sql.js

2. 调整DataSource配置

在浏览器端的数据源配置中,手动引入sql.js的实例,避免驱动自动导入失败。修改代码如下:

import { DataSource } from "typeorm";
import { Person } from "./path-to-your-person-entity";
import initSqlJs from 'sql.js';

export class AppComponent {
  constructor(platform: Platform) {
    platform.ready().then(async () => {
      if (platform.is('cordova')) {
        // 移动端配置保持不变
        const appDataSource = new DataSource({
          type: 'cordova',
          database: 'test',
          location: 'default',
          logging: ['error', 'query', 'schema'],
          synchronize: true,
          entities: [Person],
        });
        try {
          await appDataSource.initialize();
          console.log('移动端数据库初始化成功');
        } catch (error) {
          console.error('移动端数据库初始化失败:', error);
        }
      } else {
        // 浏览器端配置调整
        const SQL = await initSqlJs({
          // 指定wasm文件路径,后续需确保该文件可被访问
          locateFile: () => 'assets/sql-wasm.wasm'
        });
        
        const appDataSource = new DataSource({
          type: 'sqljs',
          driver: SQL, // 手动传入SQL实例
          autoSave: true,
          location: 'browser',
          logging: ['error', 'query', 'schema'],
          synchronize: true,
          entities: [Person],
        });
        try {
          await appDataSource.initialize();
          console.log('浏览器端数据库初始化成功');
        } catch (error) {
          console.error('浏览器端数据库初始化失败:', error);
        }
      }
    });
  }
}

3. 配置WASM文件访问权限

sql.js依赖的sql-wasm.wasm文件需要被Angular正确加载,修改angular.json中的assets配置:

"assets": [
  "src/favicon.ico",
  "src/assets",
  {
    "glob": "sql-wasm.wasm",
    "input": "./node_modules/sql.js/dist/",
    "output": "./assets/"
  }
]

4. 确保异步操作正确

注意appDataSource.initialize()是异步方法,必须用await等待执行完成,避免出现未捕获的Promise异常。

验证

重启应用后,浏览器端应能正常初始化SQLJS数据库,不再出现Cannot read properties of undefined (reading 'Database')错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:10:24