报错Cannot read property 'default' of undefined,Realm实例化问题求助
解决Realm初始化时“Cannot read property 'default' of undefined”错误
我之前也碰到过一模一样的问题,咱们一步步来排查和修复:
1. 最可能的原因:Realm模块导入方式不匹配
这个报错几乎都是因为导入的Realm不是预期的构造函数,而是一个模块对象,导致你尝试调用new Realm(...)时,实际访问的是一个没有default属性的undefined值。
修复方案:
先打印一下导入的Realm对象,确认它的结构:
import Realm from 'realm'; console.log('Realm import result:', Realm);
如果输出是一个包含default属性的对象,说明你需要用Realm.default来获取构造函数:
import Realm from 'realm'; const RealmConstructor = Realm.default || Realm; // 兼容两种导出情况 export default function Db() { this.realm = new RealmConstructor({ schema: [Wallet, WalletAddress, WalletTransaction, Log, APIWallet, APITransaction, APIAccount, Configuration], path: config.db_path }); logger(2, this.realm.path); // 这里还要注意!你之前写的是realm.path,应该是this.realm.path }
如果是Node.js的CommonJS环境,换成CommonJS的导入方式试试:
const Realm = require('realm').default;
2. 检查this的指向和实例化方式
确保你是用new Db()来创建DB实例的,如果直接调用Db(),this会指向全局对象(浏览器是window,Node.js是global),可能引发后续的异常,虽然这不是当前报错的直接原因,但也是常见的坑:
// 正确的实例化方式 const db = new Db();
3. 排查Schema中的模型是否正确导入
确认Wallet、WalletAddress等所有schema模型都已经正确导入,没有出现未定义的情况。如果某个模型是undefined,也可能导致Realm初始化时出现奇怪的报错:
// 确保所有模型都从正确的路径导入 import { Wallet, WalletAddress, WalletTransaction, Log, APIWallet, APITransaction, APIAccount, Configuration } from './models';
4. 检查Realm版本兼容性
如果你最近升级了Realm版本,可能API有变化。可以查看你当前的Realm版本(npm list realm),对照官方文档确认初始化方式是否有调整。不过这个报错大概率和版本无关,但还是可以排除一下。
内容的提问来源于stack exchange,提问作者arshbot
相关产品推荐
相关产品推荐

