@featbit/node-server-sdk

中文文档
1.4.1发布于 2026/11/03MITTypeScriptESM + CJS近 30 天下载 5.7万
中文使用文档
文档目录17 节
  1. 导言
  2. 数据同步
  3. 开始
  4. 安装
  5. 先决条件
  6. 快速启动
  7. 实例
  8. SDK 软件
  9. Fb 客户端
  10. 评价旗帜
  11. 锁定器
  12. 离线模式
  13. 禁用事件收藏
  14. 实验(A/B/n测试)
  15. 支持的 Node.js 版本
  16. 获得支持
  17. 另见

FeatBit 服务器- Side SDK 用于节点.js

导言

这是100%开源功能旗管理平台的Node.js Server-Side SDK 费特比特。 。 。 .

FeatBit Server-Side SDK为Node.js设计,主要用于网络服务器和应用等多用户系统. 它并非用于桌面和嵌入式系统应用程序.

数据同步

我们用 网络安全套 或者说 投票 使本地数据与服务器同步,然后默认将其存储在内存中。 当特性旗或其相关数据有任何更改时,此更改会被推向 SDK,平均同步时间会少于 百分点。请注意WebSocket/Polling连接可能因互联网停用而中断,但一旦问题消失,将自动恢复.

开始

安装

最新稳定版本可在 无。 。 。 .

npm install --save @featbit/node-server-sdk

先决条件

在使用SDK之前,需要获得环境秘密(sdkKey)和SDK URL.

遵循以下文档获取这些值

快速启动

以下代码显示: @featbit/node-server-sdk。 。 。 .

import { FbClientBuilder, UserBuilder } from "@featbit/node-server-sdk";

// setup SDK options
const fbClient = new FbClientBuilder()
    .sdkKey("your_sdk_key")
    .streamingUri('ws://localhost:5100')
    .eventsUri("http://localhost:5100")
    .build();

(async () => {
  // wait for the SDK to be initialized
  try {
    await fbClient.waitForInitialization();
  } catch(err) {
    // failed to initialize the SDK
    console.log(err);
  }

  // flag to be evaluated
  const flagKey = "game-runner";
  
  // create a user
  const user = new UserBuilder('a-unique-key-of-user')
    .name('bob')
    .custom('sex', 'female')
    .custom('age', 18)
    .build();

  // evaluate a feature flag for a given user
  const boolVariation = await fbClient.boolVariation(flagKey, user, false);
  console.log(`flag '${flagKey}' returns ${boolVariation} for user ${user.Key}`);

  // evaluate a boolean flag for a given user with evaluation detail
  const boolVariationDetail = await fbClient.boolVariationDetail(flagKey, user, false);
  console.log(`flag '${flagKey}' returns ${boolVariationDetail.value} for user ${user.Key}` +
  `Reason Kind: ${boolVariationDetail.kind}, Reason Description: ${boolVariationDetail.reason}`);

  // make sure the events are flushed before exit
  await fbClient.close();
})();

实例

SDK 软件

Fb 客户端

这个 FbClientNode 是提供 FeatBit 服务器访问的 SDK 的核心 。 申请应在申请的周期内立即提出一个实例.

FbClientBuilder 用于构建一个 FbClientNode 举个例子 构建者将显示配置 SDK 的方法,并最终创建 FbClientNode 举个例子.

使用流线的 FbClient

import { FbClientBuilder } from "@featbit/node-server-sdk";

const fbClient = new FbClientBuilder()
    .sdkKey("your_sdk_key")
    .streamingUri('ws://localhost:5100')
    .eventsUri("http://localhost:5100")
    .build();

使用投票的 Fb 客户端

import { FbClientBuilder, DateSyncMode } from "@featbit/node-server-sdk";

const fbClient = new FbClientBuilder()
    .sdkKey("your_sdk_key")
    .dataSyncMode(DateSyncMode.POLLING)
    .pollingUri('http://localhost:5100')
    .eventsUri("http://localhost:5100")
    .pollingInterval(10000)
    .build();

用户

IUser 定义您正在评价特征标记的用户的属性 。 IUser有两个内置属性:密钥和名. 一个IUser唯一的强制属性是密钥,密钥必须单独识别每个用户.

除了这些内置属性外,您还可以使用 custom(string key, string value) 方法。 内置属性和自定义属性都可以在瞄准规则中被引用,并包含在分析数据中.

如果用户属性缺失或无效,则该属性的条件不匹配,包括否定的运算符,例如 NotEqual 财务报告和审定财务报表 NotOneOf。通常比较一个已存在的空字符串值。 评估继续沿用后续规则,再由旗下默认规则来进行,如果没有匹配的话.

用户构建器用于构建 IUser 举个例子 构建者暴露出配置 IUser 的方法,最后创建 IUser 实例.

import { UserBuilder } from "@featbit/node-server-sdk";

const bob = new UserBuilder("unique_key_for_bob")
    .name("Bob")
    .custom('age', 18)
    .custom('country', 'FR')
    .build();

或者,可以不使用 UserBuilder数字 :

import { IUser } from "@featbit/node-server-sdk";

const bob: IUser = {
    key: "unique_key_for_bob",
    name: "Bob",
    customizedProperties: [
        { name: "age", value: "18" },
        { name: "country", value: "FR" },
    ],
};

评价旗帜

通过使用它已经收到的特性旗数据, SDK 本地计算 特性旗的值 给定用户.

有一个 variation 返回旗帜值的方法,以及 variationDetail 返回对象的方法 说明如何为每种类型确定数值.

  • bulVariation/boolVariation 详情
  • 字符串变化/字符串变化
  • 数字变化/数字变化
  • json 变化/json 变化

变位调取特性旗键,一个 IUser,和一个默认值. 如果有任何错误,则无法 评价旗帜(例如,特性旗帜密钥不匹配任何已存在的旗帜),默认值会被返回.

// flag to be evaluated
const flagKey = "game-runner";

// create a user
const user = new UserBuilder('a-unique-key-of-user')
    .name('bob')
    .custom('sex', 'female')
    .custom('age', 18)
    .build();

// evaluate a feature flag for a given user
const boolVariation = await fbClient.boolVariation(flagKey, user, false);
console.log(`flag '${flagKey}' returns ${boolVariation} for user ${user.Key}`);

// evaluate a boolean flag for a given user with evaluation detail
const boolVariationDetail = await fbClient.boolVariationDetail(flagKey, user, false);
console.log(`flag '${flagKey}' returns ${boolVariationDetail.value} for user ${user.Key}` +
    `Reason Kind: ${boolVariationDetail.kind}, Reason Description: ${boolVariationDetail.reason}`);

锁定器

默认日志使用 无 作为日志级别,这意味着它不会输出任何东西。 如果默认日志不符合您的需要, 您有两个选项 .

使用不同的日志级别

const fbClient = new FbClientBuilder()
    .logLevel('debug')
    ...
    .build();

// or
const options = {
  ...
  logLevel: 'debug'
}

const fbClient = new FbClientBuilder(options).build();

定义自己的日志

您的日志必须执行 ILOGER 浏览器 界面,我们提供了 Basic 潜行器你可以像这样使用:

const logger = new BasicLogger({
    level: 'debug',
    destination: console.log
});

const fbClient = new FbClientBuilder()
    .logger(logger)
    ...
    .build();

// or
const options = {
  ...
  logger: logger
}

const fbClient = new FbClientBuilder(options).build();

注意日志选项的优先级高于日志级 。 如果您通过两个选项, 日志级将被忽略 .

离线模式

在某些情况下,你可能要停止 远程呼叫费特比特。 这是如何:

import { FbClientBuilder } from "@featbit/node-server-sdk";

const fbClient = new FbClientBuilder()
    .offline(true)
    .build();

注: JSON 字符串的填充数据只支持离线模式.

以旗帜和片段表示的数据格式由FeatBit来定义,可能会有变化. 而不是试图 自己构建这些对象, 直接从 FeatBit 服务器以 JSON 格式请求已有的旗帜比较简单 并使用此输出作为文件的起点。 这就是:

# replace http://localhost:5100 with your evaluation server url
curl -H "Authorization: <your-env-secret>" http://localhost:5100/api/public/sdk/server/latest-all > featbit-bootstrap.json

然后使用该文件来初始化 FbClient :

import { FbClientBuilder } from "@featbit/node-server-sdk";
import fs from 'fs';

let data: string = '';
try {
  data = fs.readFileSync('path_to_the_json_file', 'utf8');
} catch (err) {
  console.error(err);
}

const fbClient = new FbClientBuilder()
    .offline(false)
    .useJsonBootstrapProvider(data)
    .build();

禁用事件收藏

默认情况下,SDK会自动向FeatBit服务器发送事件(旗下评价事件和A/B测试的度量事件),除非SDK处于离线模式.

如果您喜欢在SDK处于在线模式时禁用此事件收藏, 您可以使用 disableEvents 选项.

import { FbClientBuilder } from "@featbit/node-server-sdk";

const fbClient = new FbClientBuilder()
        .disableEvents(true)
        .build();

旗子评价事件收藏也由每个旗子控制 insightsEnabled 从 FeatBit 服务器收到的设置 :

  • false: 禁用该旗帜的评价事件收藏,而不改变其评价结果.
  • true 或缺:允许评价事件收集,但需启用全SDK事件收集.

disableEvents 必须是 false (默认)和SDK必须在线供每个旗子的见解来收集评价事件. 设置 insightsEnabled 改为 true 不覆盖 disableEvents 或离线模式。 这个 insightsEnabled 设置不影响自定义的度量事件 track();这些仍受SDK全局事件收集设置的约束.

实验(A/B/n测试)

我们支持网页浏览和点击的自动实验, 你只需要把你的实验设置在我们SaaS平台上, 那你应该可以在实验开始后 近实时看到结果.

如果你需要更多的控制 实验数据发送到我们的服务器, 我们提供一个方法 发送自定义事件.

fbClient.track(user, eventName, numericValue);

数值 ,默认值为 1.0 国家。 。 。 .

确保 track 在调用相关特性旗后调用, 否则自定义事件将不会包含 进入实验结果.

支持的 Node.js 版本

这个版本的SDK应该为最近版本的Node.js工作,如果你看到任何带有特定版本的问题, 请创建一个问题.

获得支持

  • 如果你有关于使用这个sdk的具体问题 我们鼓励你 改为 趁机问吧。 。 。 .
  • 如果您遇到错误或想要请求 特性, 提交问题。 。 。 .

另见

版本与发布记录

@featbit/node-server-sdk 共发布 10 个版本,首次发布于 2024/01/08;过去 12 个月发布了 4 个版本。

版本发布日期距今
1.4.1latest2026/11/0310 天前
1.4.02026/10/3114 天前
1.3.22026/10/091 个月前
1.3.12026/08/172 个月前
1.3.02025/11/071 年前
1.2.22025/10/141.1 年前

关于 @featbit/node-server-sdk 的常见问题

@featbit/node-server-sdk 是什么?

https://github.com/featbit/featbit-node-server-sdk 页面存档备份,存于互联网档案馆

如何安装 @featbit/node-server-sdk?

在项目目录运行 npm install @featbit/node-server-sdk,或使用 pnpm add / yarn add / bun add。

@featbit/node-server-sdk 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@featbit/node-server-sdk 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@featbit/node-server-sdk 可以商用吗?

@featbit/node-server-sdk 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@featbit/node-server-sdk 的下载量有多少?

根据 npm 官方下载统计,@featbit/node-server-sdk 在 2026/10/15 – 2026/11/13 这 30 天内被下载 56,510 次,日均约 1,884 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@featbit/node-server-sdk 还在维护吗?

最新版本 1.4.1 发布于 2026/11/03(10 天前);至今共发布 10 个版本,其中过去 12 个月发布了 4 个;首次发布于 2024/01/08。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。