跳到主要内容

设置JS错误接口

说明

  • JS探针版本要求:3.2.1以上。
  • 适用于Vue、React、Angular。
window.TINGYUN.captureException(err[, contextData])
  • err: 框架提供的错误对象或自定义错误对象。 格式为:
{
message: '错误信息',
stack: '错误堆栈'
}
  • contextData:用户自定义Error Scope内的信息,例如组件信息等。相当于在error的scope中设置context数据,参数详情参考自定义上传ScopesetContext API的参数。

注意:探针异步加载时需要判断window.TINGYUN对象已存在。

Vue示例

一般在src/main.js中配置:

配置示例:

function formatComponentName(vm) {
if (vm.$root === vm) return 'root';
var name = vm._isVue
? (vm.$options && vm.$options.name) ||
(vm.$options && vm.$options._componentTag)
: vm.name;
return (
(name ? 'component <' + name + '>' : 'anonymous component') +
(vm._isVue && vm.$options && vm.$options.__file
? ' at ' + (vm.$options && vm.$options.__file)
: '')
);
}

Vue.config.errorHandler = function(err, vm, info) {
if (!window.TINGYUN) {
return ;
}
if (vm) {
var componentName = formatComponentName(vm);
var propsData = vm.$options && vm.$options.propsData;
window.TINGYUN.captureException(err, {
componentName: componentName,
propsData: propsData,
info: info
});
} else {
window.TINGYUN.captureException(err);
}
};

React示例

一般在src/index.js中配置:

配置示例:

class ErrorBoundary extends React.Component {
constructor(props) {
super(props);
this.state = { hasError: false };
}

componentDidCatch(error, info) {
this.setState({ hasError: true });
if (!window.TINGYUN) {
return ;
}
window.TINGYUN.captureException(error, {
info: info
});
}

render() {
if (this.state.hasError) {
return null;
}
return this.props.children;
}
}

ReactDOM.render(<ErrorBoundary> <App /> </ErrorBoundary>, document.getElementById('root'));

Angular示例

一般在app.module.ts中配置:

配置示例:

import { ErrorHandler } from '@angular/core';

export class GlobalErrorHandler implements ErrorHandler {
handleError(err:any) : void {
if (!window.TINGYUN) {
return ;
}
window.TINGYUN.captureException(err);
}
}

@NgModule({
...,
providers: [ { provide: ErrorHandler, useClass: GlobalErrorHandler } ],
...
})