连接到 Atlas App Services 后端 - Node.js SDK
App 客户端是与 Atlas App Services 后端的接口。 它提供对身份验证功能和同步管理的访问。
开始之前
访问应用程序客户端
要从客户端连接到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>");
为 App Client 配置超时
您可以在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 枚举的值来确定加密行为。
要加密应用元数据,请执行以下操作:
从
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);
连接到特定MongoDB Server
默认情况下,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);
在运行时连接到不同的MongoDB Server
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", // ... }
更改具有登录用户的服务器
如果要在用户登录并打开同步数据库后更改baseURL
,则应用必须执行客户端重置。 在代码中执行以下步骤:
通过调用
app.updateBaseUrl()
方法更新baseURL
。Go执行身份验证流程,通过新的
baseURL
登录用户。打开从新服务器提取数据的同步数据库。
服务器和客户端都必须在线,用户才能进行身份验证并连接到新服务器。 如果服务器不在线或客户端没有网络连接,则用户无法进行身份验证并打开数据库。