跳转至

beforeSend (数据拦截以及数据修改)

RUM SDK 在每条数据发送之前都会执行 beforeSend 方法,通过自定义该方法的实现可以实现以下操作:

  • 修改部分数据;
  • 拦截发送数据。

beforeSend 提供两个参数:

function beforeSend(event, context)
event 由 SDK 产生采集各种指标数据对象。context 具体相关信息参考如下:

EVENT TYPE CONTEXT
View Location
Action Event
Resource (XHR) XMLHttpRequest, PerformanceResourceTiming
Resource (Fetch) Reqeust, Response, PerformanceResourceTiming
Resource (Other) PerformanceResourceTiming
Error Error
Long Task PerformanceLongTaskTiming

修改部分数据

window.DATAFLUX_RUM &&
    window.DATAFLUX_RUM.init({
        ...,
        beforeSend: (event, context) => {
            if (event.type === 'resource' && event.resource.type === 'fetch') {
                // 在原数据的基础上添加请求的返回headers信息
                event.context = {...event.context, responseHeaders: context.response.headers}
            }
        },
        ...
    });

注意beforeSend 只能修改 SDK 允许修改的数据字段。如果不在这些字段范围内的修改会被忽略。

SDK 允许修改的字段如下表:

属性 类型 描述
view.url string 页面地址
view.referrer string 页面来源
resource.url string 资源地址
error.message string 错误信息
error.resource.url string 错误资源地址
context string 全局自定义内容,例如:通过addAction, addError添加的内容。

拦截发送数据

可以通过 beforeSend 方法返回 true false 拦截一些不需要的数据。

  • true 表示这条数据需要上报;
  • false 表示这条数据忽略上报。
window.DATAFLUX_RUM &&
    window.DATAFLUX_RUM.init({
        ...,
        beforeSend: (event) => {
            if (shouldDiscard(event)) {
                return false
            } else {
                return true
            }
            ...
        },
        ...
    });

文档评价

文档内容是否对您有帮助? ×