前言
一个健壮性的 Node.js 项目,需要处理好程序错误,本文将带你入门 Node.js 的错误处理。
Error 基础
Node.js 中的错误是 Error 类的任何实例,包括一些内置错误类,还可以扩展基本 Error 类,内置错误类或其他自定义错误来创建用户定义的错误。
JavaScript Error 标准类
new Error([message[, fileName[, lineNumber]]])
message
: 描述错误的信息fileName
: Error 代码所在的文件名lineNumber
: 调用 Error 构造器所在的文件的行号
const myError = new Error('some error happened')
console.log(myError.message) // some error happened
console.log(myError.name) // Error
console.log(myError.stack) // 'Error: some error happened\n at <anonymous>:1:17'
除通用 Error 外,JavaScript 还有 6 个其他类型的内置错误对象
EvalError
: 表示eval()
有关的错误原因InternalError
: 表示JavaScript
引擎内部异常错误RangeError
: 表示数值变量或参数超出有效范围错误ReferenceError
: 表示引用错误SyntaxError
: 表示语法错误TypeError
: 表示变量或参数类型错误URIError
: 表示给encodeURI()
或decodeURI()
传递的参数无效
这些 Error 对象一旦你抛出它,它就会在堆栈中冒泡,直到在某个地方被捕获到,如果没有捕获到它,它将会变成一个未捕捉到的异常,这可能会导致你的 Node.js 应用程序崩溃。
我们常会遇到的错误类型,往往都是以下的几种情况
- JavaScript 标准错误
- 底层操作系统引发的系统错误
- 应用程序代码触发的用户指定的错误
- assert 断言模块引发的错误
错误处理
同步错误
Node.js 中发生的同步错误,都可以使用 throw 抛出错误,使用 try/catch 捕获错误,如果没有捕获错误,它将向上冒泡,变成 uncaughtException
,从而导致应用程序退出。
异步错误
- 使用 callback 这种错误优先的回调函数方式,会将错误作为第一参数传递给回调函数。这种错误不能使用
try/cat