Atlas App Services バックエンドへの接続 - Node.js SDK
項目一覧
App クライアントは、Atlas App Services バックエンドへのインターフェースです。 認証機能、関数、同期マネジメントへのアクセスを提供します。
始める前に
アプリ クライアントへのアクセス
クライアントから App Services バックエンドに接続するには、構成オブジェクトを作成する必要があります。 次に、その構成オブジェクトを Realm.App()
インスタンスに渡します。
App Services App には、 id
フィールドと App IDを含める必要があります。これは App Services UI で確認できます。
// Initialize your App. const app = new Realm.App({ id: "<yourAppId>", });
複数のアプリに接続するには、複数のアプリクライアントインスタンスを作成します。 同じアプリ ID を共有するすべてのアプリクライアント インスタンスは、同じ基礎の接続を使用します。
重要
アプリ初期化後のアプリ構成の変更
バージョン12.6.0での変更: baseUrl
はアプリ構成にキャッシュされません。
App クライアントを初期化すると、構成は内部的にキャッシュされます。 同じプロセス内で変更された構成でアプリを閉じてから再度開かしようとしても効果はありません。 クライアントはキャッシュされた構成を引き続き使用します。
Node.js SDK バージョン12.6.0 以降では、baseUrl
内のAppConfiguration
はキャッシュされ ません 。つまり、 baseUrl
を変更でき、アプリクライアントは更新された構成を使用します。 以前の SDK バージョンでは、キャッシュされたアプリ構成でbaseUrl
を変更しても効果はありません。
アプリ クライアントのインスタンスの取得
アプリケーション内の任意の場所からアプリクライアントのインスタンスを取得するには、 Realm.App.getApp()を呼び出し、 App IDを渡します。
const app = Realm.App.getApp("<yourAppId>");
アプリ クライアントのタイムアウトの設定
AppConfigurationでリクエストに任意のtimeout
を構成できます。 リクエストがタイムアウトする前に、数ミリ秒を受け入れます。
このタイムアウト間隔は任意の同期構成cancelWaitsOnNonFatalErrors
ブール値で使用できます。 タイムアウト間隔が経過すると、アップロードとダウンロードを待機している未処理の作業がキャンセルされます。 この設定が false の場合、アップロードとダウンロードを待機してもキャンセルされません。これは、Realm がこれらのタイムアウトを致命的でないエラーとして扱うためです。
例については、「 タイムアウト後に非同期操作をキャンセルする 」を参照してください。
const app = new Realm.App({ id: APP_ID, // You can optionally specify a timeout in milliseconds timeout: 10000, });
アプリ メタデータの暗号化
App Services がクライアント デバイスに保存するメタデータを暗号化できます。 暗号化動作を決定するには、 MetadataMode 列挙型の値を使用します。
アプリのメタデータを暗号化するには:
Realm
MetadataMode
をインポートし、他の依存関係をインポートします。import Realm, { BSON, MetadataMode } from "realm"; import Realm, { AppConfiguration, BSON, MetadataMode, Configuration, } from "realm"; metadata
プロパティを含むアプリ構成オブジェクトを作成します。metadata.mode
をMetadataMode.Encryption
に設定します。暗号化に使用するキーに
metadata.encryptionKey
を設定します。アプリ構成オブジェクトを
new Realm.App()
に渡します。
// Retrieve encryption key from secure location or create one const encryptionKey = new ArrayBuffer(64); // Use encryption key in app configuration const config = { id: APP_ID, metadata: { mode: MetadataMode.Encryption, encryptionKey: encryptionKey }, }; const app = new Realm.App(config);
// Retrieve encryption key from secure location or create one const encryptionKey = new ArrayBuffer(64); // Use encryption key in app configuration const config: AppConfiguration = { id: APP_ID, metadata: { mode: MetadataMode.Encryption, encryptionKey: encryptionKey }, }; const app = new Realm.App(config);
特定のサーバーへの接続
デフォルトでは、Atlas Device SDK はhttps://services.cloud.mongodb.com
のグローバルbaseURL
を使用して Atlas に接続します。 場合によっては、別のサーバーに接続する必要があるかもしれません。
App Services Appはローカル配置を使用しており、リージョン内のローカル
baseURL
に直接接続する場合があります。
AppConfigurationでbaseURL
を指定できます。
.. code-block:: javascript const appConfig = { id: APP_ID, baseUrl: "https://example.com", }; const app = new App(appConfig);
.. code-block:: typescript const appConfig: AppConfiguration = { id: APP_ID, baseUrl: "https://example.com", }; const app = new App(appConfig);
実行中に別のサーバーへの接続
バージョン12.8.0の新機能。
場合によっては、アプリが の実行中中にbaseURL
を変更する必要があるかもしれません。
実行中にbaseURL
を変更するには、 app.updateBaseUrl()
メソッドを呼び出します。 string 値は後続のスラッシュで終わることができないことに注意してください。
const app = new App(EDGE_APP_ID); await app.updateBaseUrl("http://localhost:80"); // ... log in a user and use the app... // ... some time later... // Reset baseURL to the default: https://services.cloud.mongodb.com await app.updateBaseUrl(null);
const app = new App(EDGE_APP_ID); await app.updateBaseUrl("http://localhost:80"); // ... log in a user and use the app... // ... some time later... // Reset baseURL to the default: https://services.cloud.mongodb.com await app.updateBaseUrl(null);
この API は実験的なため、この API を使用するファイルで実験的なインポートを使用する必要があります。
import "realm/experimental/base-url";
Typescript試験用 の 構成API
app.updateBaseUrl()
メソッドは実験的なモジュールに含まれているため、個別にインポートする必要があります。 このモジュールから適切な型を取得するには、 tsconfig.json
ファイルに次のフィールドを設定する必要があります。
{ "target": "es2022", "module": "node16", "moduleResolution": "node16", // ... }
ログインしたユーザーのサーバー変更
If you want to change the baseURL
after you have logged in a user and have opened a synced database, the app must perform a client reset. コード内で次の手順を実行します。
app.updateBaseUrl()
メソッドを呼び出してbaseURL
を更新します。認証フローを再度実行し、新しい
baseURL
からユーザーをログインさせGo 。同期されたデータベースを開き、新しいサーバーからデータをプルします。
ユーザーが認証を行い、新しいサーバーに接続するには、サーバーとクライアントの両方がオンラインである必要があります。 サーバーがオンラインでない場合、またはクライアントにネットワーク接続がない場合、ユーザーは認証を行いデータベースを開くことができません。