我正在尝试使用我的react native应用程序在本地设置Realm DB,但似乎有一个错误,我无法找出原因。我遵循了documentation和指南here。
我的代码。
import Realm from 'realm';
export const ConfigSchema = {
name: 'Config',
primaryKey: 'key',
properties: {
key: 'string',
value: 'string'
}
};
export const databaseOptions = {
path: 'myappreactnative.realm',
schema: [ConfigSchema],
schemaVersion: 0
};
export const insertNewConfig = (newConfig) => new Promise((resolve, reject) => {
Realm.open(databaseOptions).then(realm => {
// realm.create('Config', newConfig);
// resolve(newConfig);
console.log(realm);
}).catch((error) => reject(error))
});
我从这里打insertNewConfig
,
let config = {
key: 'instanceUrl',
value: 'myurl.domain.value'
};
insertNewConfig(config).then((result) => {
console.log(result);
}).catch((error) => {
console.log(error);
});
this.props.navigation.navigate('Login', {});
在Realm.open(databaseOptions)
行有错误。首先,我虽然是realm.create
的问题,但后来才意识到原来的行。
显示的错误是这样的。
Error: _constructor must be of type 'function', got (undefined)
at sendRequest (rpc.js:263)
at Object.createRealm (rpc.js:62)
at new Realm (index.js:102)
at Function.open (extensions.js:110)
at eval (eval at <anonymous> (MetroClient.js:63), <anonymous>:29:22)
at tryCallTwo (core.js:45)
at doResolve (core.js:200)
at new Promise (core.js:66)
at insertNewConfig (eval at <anonymous> (MetroClient.js:63), <anonymous>:28:12)
at Object.SelectInstanceScreen._this.continueLogin [as onPress] (eval at <anonymous> (MetroClient.js:63), <anonymous>:74:37)
似乎必须将open()
函数作为一个函数调用(_constructor必须是'function'类型),但是很显然open()
被称为一个函数。
预先感谢。
答案 0 :(得分:6)
我认为这可能是最新版本(2.18.0)的错误,请尝试将其降级到2.16.0即可。
答案 1 :(得分:2)
它与领域的最新版本(v2.18.0)相关。您应该降级到2.16.0。
之后,您可以运行此代码来重置所有软件包;
watchman watch-del-all && rm -rf $TMPDIR/react-native-packager-cache-* && rm -rf $TMPDIR/metro-bundler-cache-* && rm -rf node_modules/ && yarn cache clean && yarn install && yarn start -- --reset-cache
答案 2 :(得分:1)
我更改了package.json更改了
来自"realm": "ˆ2.16.0",
到"realm": "2.16.0",
然后执行npm install
或yarn
为我解决了。
答案 3 :(得分:1)
存在一些与节点更新和领域有关的问题。 Realm无法在Node 10上运行,并且将您的问题降级到2.16即可解决问题。