前端异常示例

引子

前端异常类型及捕获方式 之后,尝试了自己去封装一下,然后去看了 sentry 的源码,发现之前的那篇只是一个概括,当采集的时候,需要更加细致的解析,接下来看看各种异常具体是什么样的。

基础知识点

前端异常一定会接触到 Error 对象,先来简单的了解一下。

错误的类型:

  • Error : 基类型,其它错误类型都是继承自该类型。
  • EvalError : 使用 eval() 函数而发生异常时抛出。
  • RangeError : 数值超出相应有效范围时的异常。
  • ReferenceError : 访问无效的引用的异常。
  • SyntaxError : 语法错误的异常。
  • TypeError : 变量或参数不是一个有效类型的异常。
  • URIError : encodeURI()decodeURI() 传入无效参数的异常。
  • AggregateError : 一个操作导致多个异常需要报告,例如 Promise.any()
  • InternalError : JavaScript 引擎内部抛出的错误,这个还没有标准化。

实例共有的标准属性:

  • message : 异常信息。
  • name : 异常名称。

实例共有的非标准属性:

  • description : 微软的非标准属性,类似 message 。
  • number : 微软的非标准属性,异常数字。
  • fileName : Mozilla 的非标准属性,异常产生所在文件的路径。
  • lineNumber : Mozilla 的非标准属性,异常产生所在文件的行数。
  • columnNumber : Mozilla 的非标准属性,异常产生所在文件的列数。
  • stack : Mozilla 的非标准属性,堆栈跟踪。

更多异常相关的信息见 ecma-262 ErrorWebIDL Exceptions

下面看看每种类型的示例。(暂没有考虑框架)

以下示例环境:

  • Chrome :86.0.4240.198(正式版本) (x86_64)。
  • 使用 nginx 启动了一个本地服务,原生 js 。
  • 为了方便查看更多信息,使用了 try-catch、onerror、onunhandledrejection 。

EvalError

EvalError 已不再被 JavaScript 抛出,现在该对象为了保持兼容性存在。用下面的方式可以看到这种异常:

try {
   
  throw new EvalError('Hello, EvalError');
} catch (e) {
   
  console.log(e instanceof EvalError); // true
  console.log(e.message);              // "Hello, EvalError"
  console.log(e.name);                 // "EvalError"
}

查一些资料说下面方式就会抛出该类型异常,但试了一下抛出的异常是 TypeError

new eval();

RangeError

const arr = new Array(<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在controller层抛出异常,可以使用Spring框架提供的@ControllerAdvice注解来实现全局异常处理。具体步骤如下: 1. 创建一个类,使用@ControllerAdvice注解标注,用于捕获异常并处理。 2. 在该类中编写异常处理方法,使用@ExceptionHandler注解标注,指定要捕获的异常类型。 3. 在异常处理方法中,可以根据需要进行异常处理,例如记录日志、返回错误信息等。 4. 在前端页面上使用ajax请求后端接口时,可以通过try-catch语句捕获异常,并将异常信息显示给用户。 下面是一个示例代码: ```java @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity<String> handleException(Exception e) { // 记录日志 log.error("系统异常:", e); // 返回错误信息 return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } ``` 在上述代码中,我们使用了Spring框架提供的ResponseEntity类来返回错误信息,并设置状态码为500。在前端页面上,可以通过以下方式获取异常信息: ```javascript $.ajax({ url: "/api/test", type: "POST", dataType: "json", success: function(data) { // 处理成功返回的数据 }, error: function(jqXHR, textStatus, errorThrown) { // 显示错误信息 alert(jqXHR.responseText); } }); ``` 在上述代码中,我们通过jqXHR对象的responseText属性获取到后台返回的错误信息,并将其显示给用户。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值