Node.js Error简介以及捕获方式

error的类型

nodejs 的error 一般分为四种类型:

1、标准的 JavaScript 错误,例如 EvalError、SyntaxError、RangeError、ReferenceError、TypeError 或 URIErro。
2、由底层操作系触发的系统错误,例如试图打开不存在的文件、或试图使用已关闭的 socket 发送数据。
3、由应用程序代码触发的用户自定义的错误。
4、AssertionError 错误,当 Node.js 检测到不应该发生的异常逻辑时触发。这类错误通常来自 assert 模块。

 

error的捕获

nodejs有3种当应用程序发生错误时的捕获方式

1、try…catch

一般用于处理代码中可能出现的错误信息,当错误发生时, JavaScript 会停止执行,并生成一个错误信息。使用 throw 语句 来创建自定义消息(抛出异常)。如果你将 throw 和 try 、 catch一起使用,就可以控制程序输出的错误信息。若异常用try…catch 处理,则nodejs进程会立即退出。

// 抛出一个 ReferenceError,因为 z 未定义。
try {
  const m = 1;
  const n = m + z;
} catch (err) {
  // 在这里处理错误。
}

但需要注意的是,如果想在异步方法的回调函数里面抛出错误,不要放在 try … catch 代码块中,因为代码执行顺序的原因, 回调函数还没有执行, try…catch 代码已经执行完毕并退出.

try {
     setTimeout(function () {
     // 抛出一个异常错误,这是因为异步函数执行上下文不同,所以捕获不到。
        throw new Error('setTimeout error');
    }, 1000);
} catch (err) {
    console.log(err);
}

2、回调函数中的error参数

大多数 Node.js 核心 API 所提供的异步方法都遵从错误信息优先的回调模式惯例,这种模式有时也称为 Node.js 式回调。在这种模式中,一个回调函数首先被作为参数传给异步方法。当该方法完成操作或产生错误时,它会调用回调函数,并将可能存在的 Error 对象作为第一个参数传给回调函数。如果没有错误产生,那么第一个参数为 null 。

const fs = require('fs');

fs.readFile('/f1', (err, data) => {
    if(err) {
        console.error('出错', err);
        return;
    }
    console.log(data);
});

3、process.on(‘uncaughtException’)事件监听

当系统发生异常,且没有被try…catch捕获时;会出发‘uncaughtException’事件;该方法适用于全局的异常捕获,来避免nodejs进程的崩溃,但该方法仅仅用于异常捕获,无法做成相应的异常处理,因为无法定位到发生异常的上下文。

process.on('uncaughtException', (err) => {
  console.log(err);
});

setTimeout(() => {
  console.log('这里仍然会运行');
}, 500);

// 故意引起异常,但不要捕获它。
errorFunc();
console.log('这里不会运行');

结语:异常错误是程序中无法避免的,但重要的是我们如何在发生错误的时候如何处理错误,来保证程序的顺利执行。

 

在这里插入图片描述
睿江云官网链接:https://www.eflycloud.com/home?from=RJ0036

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章