Skip to content

微信小程序 SDK

HealthGuard 微信小程序 SDK(@health-guard/sdk-miniprogram)用于在微信、支付宝等小程序运行时中采集错误、请求和页面生命周期信息。

安装

bash
npm install @health-guard/sdk-miniprogram

基础用法

ts
import { createMiniProgramClient } from '@health-guard/sdk-miniprogram';

const client = createMiniProgramClient({
  appKey: 'your-app-key',
  endpoint: 'https://your-server.com/api/events/batch',
  wx: wx,
  autoCapture: true
});

域名配置

小程序要求使用 HTTPS 上报地址,并需要将 Collector 域名添加到小程序后台的「request 合法域名」列表中。

配置选项

选项类型必填默认值说明
appKeystring-应用唯一标识
endpointstring-Collector 上报地址
wxMiniProgramWxLike-小程序全局 wx / my 等运行时对象
platformstringwechat-miniprogram平台标识,如 alipay-miniprogram
releasestring-应用版本号
environmentstring-环境:development / test / production
userIdstring-业务用户标识
autoCaptureboolean | objectfalse是否自动捕获错误和请求
flushIntervalMsnumber5000批量上报间隔(毫秒)
maxBatchSizenumber10单次上报最大事件数
transportFailureRetryDelayMsnumber30000transport 失败后回队等待重试的间隔(毫秒)

autoCapture 选项

autoCapturetrue 时,开启全部自动采集:

js
autoCapture: {
  request: true   // 拦截 wx.request
}

手动上报 API

captureException(error, errorType?, context?)

手动上报一个错误:

js
try {
  riskyOperation();
} catch (err) {
  client.captureException(err);
}

也可以指定错误类型和上下文:

js
client.captureException('custom error', 'native', { page: 'pages/order/detail' });

captureHttp(input)

手动上报一次 HTTP 请求:

js
client.captureHttp({
  method: 'POST',
  url: '/api/order',
  status: 500,
  duration: 240,
  success: false,
  errorMessage: 'Internal Server Error'
});

addBreadcrumb(breadcrumb)

添加一条面包屑:

js
client.addBreadcrumb({
  type: 'click',
  message: 'User tapped submit button',
  data: { formId: 'checkout' }
});

wrapPage(route, definition)

为页面生命周期自动添加面包屑:

js
Page(client.wrapPage('pages/index/index', {
  data: { ... },
  onLoad() { ... },
  onShow() { ... }
}));

wrapApp(definition)

为 App 生命周期自动添加面包屑:

js
App(client.wrapApp({
  onLaunch() { ... },
  onShow() { ... }
}));

flush()

立即刷新队列,上报所有未发送事件(包括 transport 失败后重新入队的事件):

js
await client.flush();

请求标注

使用 wx.request 时,可通过 healthGuard 字段补充上下文,避免上报敏感数据:

js
wx.request({
  url: '/api/order',
  healthGuard: {
    page: 'pages/order/detail',
    scene: 'checkout',
    context: { orderId: '123' },
    requestData: { sku: 'abc' }   // 按需上报,不会自动采集
  }
});

隐私与脱敏

  • URL Query 中的 authorizationpasswordtokensecretcookie 等字段会被自动过滤。
  • 请求体与响应体默认不上报,需通过 healthGuard.requestData 显式传入。
  • 使用业务方传入的 userId 或匿名 ID,不采集真实身份信息。

Released under the MIT License.