Realm の構成、オープン、クローズド - Node.js SDK
項目一覧
Realm を開く
ローカル(同期されていない)Realm を開くには、 Realm.Configurationオブジェクトを非同期メソッドRealm.open() に渡します。
注意
デフォルトの Realm パスへのアクセス
Configuration
オブジェクトで path
プロパティを指定しない場合、SDK はデフォルト パスに Realm を作成します。 Realm.defaultPath
グローバル プロパティを使用して、デフォルトの Realm パスにアクセスして変更できます。
// Open a local realm file with a predefined Car object model const realm = await Realm.open({ schema: [Car], });
スキーマを提供せずに Realm を開く
デバイスに Realm を作成した後、同じ Realm にアクセスするときにnew 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();
インメモリ Realm のオープン
ファイルに書き込まれずにメモリ内で完全に実行される Realm を作成するには、 Realm.ConfigurationオブジェクトにinMemory: true
を追加します。
const realm = await Realm.open({ inMemory: true, schema: [Car], });
注意
メモリが不足している場合、インメモリ Realm はディスク領域を使用することがありますが、Realm を閉じると、インメモリ Realm によって作成されたファイルが削除されます。
データのコピーと新しい Realm のオープン
バージョン 10.14.0 の新機能。
既存の Realm から異なる構成オプションを持つ新しい Realm にデータをコピーするには、新しい構成をRealm.writeCopyTo() 使用して複数のドキュメントを挿入できます。
新しいRealmの構成で、 path
を指定する必要があります。
コピーした Realm をすでに存在する Realm ファイルに書込むと、データはオブジェクトごとに書込まれます。 特定のプライマリキーのオブジェクトがすでに存在する場合は、コピー操作により、 オブジェクトが置き換えられます。 コピー操作を成功させるには、コピーする Realm と書き込み先の Realm のスキーマと互換性がある必要があります。 両方の構成のスキーマ内のオブジェクトのみがコピーされます。
構成の変更には、 SyncConfigurationの変更を含めることができます。
ローカルRealm から同期されたRealm
同期された Realm からローカル Realm への同期
同期された Realm から別のユーザーの同期された Realm
注意
パーティションベースの同期のみ
このメソッドは、非同期 Realm と パーティションベースの同期 との間の変換のみをサポートします。 アプリで Flexible Sync を使用する場合は、一方の Realm 内のオブジェクトを手動で反復処理し、もう一方の Realm にコピーする必要があります。
注意
同じタイプの同期のみ
このメソッドは、別のパーティションベースの同期ユーザーのパーティションベースの同期構成、または別の Flexible Sync ユーザーの Flexible Sync 構成のコピーのみをサポートします。 このメソッドを使用して、 パーティションベースの同期 Realm と Flexible Sync レルムの間で、またはその逆に変換することはできません。
構成の変更には、 Configuration
のencryptionKey
プロパティに対する変更も含めることができます。
暗号化された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 として開くことも、暗号化されていない同期された Realm を暗号化された同期 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 を閉じる
メモリリークを避けるために、Realm インスタンスで実行する場合は、 close()
メソッドを忘れずに呼び出すことが重要です。
realm.close();
HTTP proxyの使用
Realm Node.js SDKは、 HTTP proxyの背後で実行される のサポートを制限しています。
要件
Realm Node.js SDK v10.3.0以降。
npm CLI v6.9.0 以降が必要です。
制限
fetch-with-proxy を インストールする必要があります パッケージを手動でアップデートします。
クライアントからプロキシ サーバーへの HTTPS 接続はサポートされていません。
HTTPS_PROXY
で指定される URL はhttp://
で始まる必要があります。HTTPS_PROXY
環境変数を設定する必要があります。 プロキシは、実行時にまたはアプリごとに設定することはできません。
fetch-with-proxy のインストール
ネットワーク トランスポート層で使用されるnode-fetch
パッケージを切り替えるには、手動の手順が必要です。
Realm Node.js SDKをインストールした後、次のコマンドを実行してネットワーク トランスポート パッケージに別のパッケージをインストールします。
npm install node-fetch@npm:fetch-with-proxy --prefix node_modules/realm-network-transport
HTTPS_PROXY を設定し、スクリプトを実行
Realm JavaScriptのリクエストをすべてHTTP proxy経由でルーティングしながら、任意のスクリプト ファイルを実行できます。
Unix システムでは、 コマンドの前に環境変数の割り当てを先頭に付けることができます。
HTTPS_PROXY=http://127.0.0.1:3128 node index.js