Skip to content

TIP

**推荐做法:**使用 Lovrabet 官方服务时,在 createClient() 中配置 region;企业独立部署时配置 runtimeDomain。显式 runtimeDomain 的优先级高于 region

本文面向使用 @lovrabet/sdk 的前端和 Node.js 开发人员,说明如何选择中国大陆或印度尼西亚 Runtime 节点,以及如何接入企业独立部署的 Runtime。

SDK 与 CLI 的配置方式不同

产品配置入口
Rabetbase / Lovrabet CLI通过 config init Prompt 或本地 JSON 配置。
Lovrabet Node SDK没有 config init,也不会主动读取 .rabetbase.json.lovrabet.json;在应用代码的 createClient() 中传入配置。

通过 Rabetbase 项目模板生成项目时,模板可以把 Rabetbase 中非默认的 regionruntimeDomain 写入 SDK 初始化代码;真正运行时,SDK 仍只消费传给 createClient() 的值。

使用官方中国大陆节点

cn 是默认国家/地区。可以显式写出:

typescript
import { createClient } from "@lovrabet/sdk";

const client = createClient({
  appCode: "app-xxx",
  region: "cn",
  models: [],
});

也可以省略 region,默认就是中国大陆官方节点:

typescript
const client = createClient({
  appCode: "app-xxx",
  models: [],
});

使用官方印度尼西亚节点

typescript
const client = createClient({
  appCode: "app-xxx",
  region: "id",
  models: [],
});

SDK 会把 region 解析为对应的官方 Runtime 地址。当前只支持 cn 和 id;使用其他值会抛出 INVALID_REGION,不会静默访问其他国家/地区。

region 的官方 Runtime 地址

国家/地区region官方 Runtime 地址
中国大陆cnhttps://runtime.lovrabet.com
印度尼西亚idhttps://runtime.lovrabet.id

用户只需要选择国家/地区。其他地址需求统一通过显式 runtimeDomain 处理,不对外暴露内部路由维度。

企业独立部署:配置 runtimeDomain

企业 Runtime 使用自定义地址时,直接在 createClient() 中传入:

typescript
const client = createClient({
  appCode: "app-xxx",
  runtimeDomain: "https://runtime.customer.example.com",
  models: [],
});

一旦配置 runtimeDomain,它会覆盖 region 选择的官方地址:

typescript
const client = createClient({
  appCode: "app-xxx",
  region: "id",
  
  runtimeDomain: "https://runtime.customer.example.com",
  models: [],
});

// 实际基地址仍是 https://runtime.customer.example.com

地址格式要求

  • 必须是绝对 HTTP(S) 地址。
  • 不能包含账号密码、query 或 fragment。
  • 首尾空白和末尾斜杠会被规范化。
  • HTTP 仅为本地开发和少量兼容场景保留;正式服务与企业部署应使用 HTTPS。

浏览器页面注入配置

Lovrabet 生成的业务页面可以在加载时注入 Runtime 地址:

javascript
window.__GLOBAL__ = {
  deploymentConfig: {
    RUNTIME_API_DOMAIN: "https://runtime.customer.example.com"
  }
};

应用代码无需重复传入 runtimeDomain

typescript
const client = createClient({
  appCode: "app-xxx",
  models: [],
});

如果代码同时传入 runtimeDomain,代码参数优先于页面注入值。这让同一个前端构建产物可以由不同部署实例动态注入 Runtime 地址,同时仍允许应用显式覆盖。

完整解析优先级

  1. createClient({ runtimeDomain }):正式的企业部署配置,优先级最高。
  2. serverUrl:旧字段,仅为向后兼容保留;新代码不要再使用。
  3. window.__GLOBAL__.deploymentConfig.RUNTIME_API_DOMAIN:浏览器页面注入。
  4. region:官方国家/地区节点映射。
  5. 未传时:默认使用 cn。

所有 SDK 服务共用一个 Runtime Domain

当前 SDK 只支持 runtimeDomain,没有 ocrDomainfileDomain 或通用 serviceDomains。以下能力都使用同一个 Runtime 基地址:

  • 数据模型 CRUD 与过滤查询
  • SQL 与 BFF
  • OCR
  • 文件上传与取用
  • 其他 Runtime 服务

如果企业只部署部分 Runtime 服务,SDK 不会把未部署的某项能力自动回退到 Lovrabet 官方服务;请求仍发往企业 runtimeDomain,由服务端明确返回“暂未部署”或相应错误。需要多套地址时,由业务应用创建不同 Client 或自行编排。

认证模式不会改变 Domain

authMode 决定请求路径和认证头,不决定基础地址:

authMode典型凭据Domain
cookie浏览器 Cookie 或显式 Cookie仍使用同一个 runtimeDomain / 官方 Runtime
client-akaccessKey仍使用同一个 runtimeDomain / 官方 Runtime
openapiaccessKey,或 token + timestamp仍使用同一个 runtimeDomain / 官方 Runtime

未设置 authMode 时默认是 cookie;SDK 不会因为配置了 accessKey 就自动切换认证模式。

常见配置示例

Node.js 使用企业 Runtime 与 Client AK

typescript
const client = createClient({
  appCode: "app-xxx",
  authMode: "client-ak",
  accessKey: secureAccessKey,
  runtimeDomain: "https://runtime.customer.example.com",
  models: [],
});
typescript
const client = createClient({
  appCode: "app-xxx",
  authMode: "cookie",
  region: "id",
  
  models: [],
});

验证配置

初始化后可读取最终基地址:

typescript
console.log(client.getBaseUrl());

预期结果示例:

常见问题

SDK 会读取 Rabetbase CLI 的配置文件吗?
不会。需要由项目模板或应用代码把 regionruntimeDomain 传给 createClient()

可以同时配置 regionruntimeDomain 吗?
可以,但 runtimeDomain 优先,region 不参与当前 Client 的地址选择。

不同部署实例有不同企业 Runtime 怎么办?
应用可以从自己的部署配置读取 runtimeDomain,再传入 createClient()。SDK 不额外引入新的公开路由维度。

还能继续使用 serverUrl 吗?
暂时可以,但它已废弃且优先级低于 runtimeDomain。新代码统一使用 runtimeDomain


适用版本:按 2026-08-23 Lovrabet Node SDK main 分支(包版本 1.5.1-beta.0)核对。

基于飞书知识库同步生成,内容以飞书源文档为准