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

连接到 Atlas App Services 后端 - Node.js SDK

在此页面上

  • 开始之前
  • 访问应用程序客户端
  • 检索应用程序客户端的实例
  • 为 App Client 配置超时
  • 加密应用元数据
  • 连接到特定MongoDB Server
  • 在运行时连接到不同的MongoDB Server

App 客户端是与 Atlas App Services 后端的接口。 它提供对身份验证功能同步管理的访问。

  1. 创建 App Services App

  2. 安装 Realm Node.js SDK

要从客户端连接到App Services后端,您需要创建一个配置对象。 然后,将该配置对象传递给 Realm.App()实例。

您必须包含App Services App的id字段和 App ID ,您可以在App Services用户界面中找到它们。

// Initialize your App.
const app = new Realm.App({
id: "<yourAppId>",
});

您可以创建多个应用客户端实例以连接多个应用。 股票相同 App ID的所有 App客户端实例使用相同的根本的连接。

重要

初始化应用后更改应用配置

在版本12.6.0中进行了更改baseUrl未缓存在应用配置中。

初始化 App客户端时,会在内部缓存配置。 尝试在同一进程中关闭并重新打开配置已更改的应用无效。 客户端继续使用缓存的配置。

从 Node.js SDK 版本12.6.0开始,不会缓存AppConfiguration中的baseUrl 。 这意味着您可以更改baseUrl ,应用客户端将使用更新后的配置。 在早期 SDK 版本中,对缓存的应用配置中的baseUrl进行更改无效。

要从应用程序中的任何位置检索 App Client 实例,请调用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,
});

您可以对Atlas App Services在客户端设备上存储的元数据进行加密。 使用MetadataMode 枚举的值来确定加密行为。

要加密应用元数据,请执行以下操作:

  1. Realm导入MetadataMode并导入其他依赖项:

    import Realm, { BSON, MetadataMode } from "realm";
    import Realm, {
    AppConfiguration,
    BSON,
    MetadataMode,
    Configuration,
    } from "realm";
  2. 创建包含metadata属性的应用配置对象。

  3. metadata.mode 设置为 MetadataMode.Encryption

  4. metadata.encryptionKey设置为要用于加密的密钥。

  5. 将应用配置对象传递给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";

app.updateBaseUrl()方法位于实验性模块中,您必须单独导入该模块。 要从此模块获取正确的类型,您需要在tsconfig.json文件中设置以下字段:

{
"target": "es2022",
"module": "node16",
"moduleResolution": "node16",
// ...
}

如果要在用户登录并打开同步数据库后更改baseURL ,则应用必须执行客户端重置。 在代码中执行以下步骤:

  1. 暂停同步会话。

  2. 通过调用app.updateBaseUrl()方法更新baseURL

  3. Go执行身份验证流程,通过新的baseURL登录用户。

  4. 打开从新服务器提取数据的同步数据库。

服务器和客户端都必须在线,用户才能进行身份验证并连接到新服务器。 如果服务器不在线或客户端没有网络连接,则用户无法进行身份验证并打开数据库。

后退

Atlas App Services