Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ /

配置、打开和关闭 Realm - Node.js SDK

在此页面上

  • 打开 Realm
  • 无需提供模式即可开启 Realm
  • 打开内存中 Realm
  • 复制数据并打开 Realm
  • 关闭 Realm
  • 使用 HTTP 代理
  • 要求
  • 限制
  • 安装 fetch-with-proxy
  • 设置 HTTPS_PROXY 并运行脚本

要打开本地(非同步) 域,请将 Realm .Configuration对象传递给异步方法Realm.open()。

注意

访问默认 Realm 路径

如果您未在 Configuration 对象中指定 path 属性,SDK 将在默认路径中创建一个域。您可以使用 Realm.defaultPath 全局属性访问和更改默认域路径。

// Open a local realm file with a predefined Car object model
const realm = await Realm.open({
schema: [Car],
});

在设备上创建 Realm 后,您可以在通过调用new Realm()访问同一 Realm 时省略模式。 SDK 从 Realm.defaultPath 的现有 Realm 文件中派生出该 Realm 的模式。

在不提供模式的情况下访问 Realm 仅适用于本地 Realm。使用同步 Realm 时,必须始终传递模式。

// Open the Realm with a schema
const realm = new Realm({ schema: [Car] });
realm.close();
// Reopen it without a schema
const reopenedRealm = new Realm();

要创建一个完全在内存中运行而不写入文件的域,请将 inMemory: true 添加到您的 Realm.Configuration 对象中:

const realm = await Realm.open({
inMemory: true,
schema: [Car],
});

注意

如果内存不足,内存中 Realm 可能会使用磁盘空间;但关闭 Realm 时,内存中 Realm 创建的文件将被删除。

版本 10.14.0 中的新增功能

要将数据从现有域复制到具有不同配置选项的新域,请为新配置传递 Realm.writeCopyTo() 方法。

在新域的配置中,您必须指定 path

如果将复制的 Realm 写入已存在的 Realm 文件,则数据将逐个对象写入。 如果给定主键已经存在对象,则复制操作会替换对象。 您复制的 Realm 和您正在写入的 Realm 模式必须兼容,复制操作才能成功。 仅复制两种配置模式中的对象。

配置更改可以包括对SyncConfiguration 的修改:

  • 本地 Realm 到同步 Realm

  • 同步 Realm 到本地 Realm

  • 将同步 Realm 到其他用户的同步 Realm

注意

仅限基于分区的同步

此方法仅支持在非同步 Realm 和基于分区的同步之间进行转换。如果应用程序使用“灵活同步”,则必须手动遍历一个 Realm 中的对象,并将其复制到另一个 Realm。

注意

仅限同类型同步

此方法仅支持复制另一个基于分区的同步用户的基于分区的同步配置,或复制另一个 Flexible Sync 用户的 Flexible Sync 配置。 您不能使用此方法在基于分区的同步 Realm 和 Flexible Sync Realm 之间进行转换,反之亦然。

配置更改还可以包括对ConfigurationencryptionKey属性的更改:

  • 加密 Realm 到未加密 Realm

  • 未加密 Realm 到加密 Realm

例子

将本地 Realm 转换为同步 Realm

const localConfig = {
schema: [Car],
path: "localOnly.realm",
};
const localRealm = await Realm.open(localConfig);
const syncedConfig = {
schema: [Car],
path: "copyLocalToSynced.realm",
sync: {
user: app.currentUser,
partitionValue: "myPartition",
},
};
localRealm.writeCopyTo(syncedConfig);
const syncedRealm = await Realm.open(syncedConfig);
const localConfig: Realm.Configuration = {
schema: [Car],
path: "localOnly.realm",
};
const localRealm = await Realm.open(localConfig);
const syncedConfig: Realm.Configuration = {
schema: [Car],
path: "copyLocalToSynced.realm",
sync: {
user: app.currentUser!,
partitionValue: "myPartition",
},
};
localRealm.writeCopyTo(syncedConfig);
const syncedRealm = await Realm.open(syncedConfig);

您还可以合并对配置的更改。例如,您可以将本地加密域作为同步的未加密域打开,或者将未加密的同步域作为加密的同步域打开。

例子

将同步加密 Realm 转换为本地未加密 Realm

// Create a secure key.
const encryptionKey = new Int8Array(64);
// ... store key
const syncedEncryptedConfig = {
schema: [Car],
path: "syncedEncrypted.realm",
sync: {
user: app.currentUser,
partitionValue: "myPartition",
},
encryptionKey,
};
const syncedEncryptedRealm = await Realm.open(syncedEncryptedConfig);
const localUnencryptedConfig = {
schema: [Car],
path: "copyLocalUnencrypted.realm",
};
syncedEncryptedRealm.writeCopyTo(localUnencryptedConfig);
const localUnencryptedRealm = await Realm.open(syncedEncryptedConfig);
// Create a secure key.
const encryptionKey = new Int8Array(64);
// ... store key
const syncedEncryptedConfig: Realm.Configuration = {
schema: [Car],
path: "syncedEncrypted.realm",
sync: {
user: app.currentUser!,
partitionValue: "myPartition",
},
encryptionKey,
};
const syncedEncryptedRealm = await Realm.open(syncedEncryptedConfig);
const localUnencryptedConfig: Realm.Configuration = {
schema: [Car],
path: "copyLocalUnencrypted.realm",
};
syncedEncryptedRealm.writeCopyTo(localUnencryptedConfig);
const localUnencryptedRealm = await Realm.open(syncedEncryptedConfig);

提示

另请参阅:

请务必记住在完成 Realm 实例后调用 close() 方法,以避免内存泄漏。

realm.close();

Realm Node.js SDK 对在 HTTP 代理后面运行的支持有限。

  • Realm Node.js SDK v10.3.0 或更高版本。

  • 需要 NPM CLI v6.9.0 或更高版本。

需要手动步骤来切换网络传输层使用的 node-fetch 包。

安装 Realm Node.js SDK 后,运行以下命令,以在网络传输包中安装一个不同的包:

npm install node-fetch@npm:fetch-with-proxy --prefix node_modules/realm-network-transport

您可以运行任意脚本文件,同时通过 HTTP 代理路由 Realm JS 的所有请求。

在 UNIX 系统上,您可以在命令前添加为环境变量赋值的前缀:

HTTPS_PROXY=http://127.0.0.1:3128 node index.js

后退

Realm 文件