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
相关产品推荐
相关产品推荐

