node.js错误类型

本文大致介绍了node.js中四种常见的错误类型,列举了常见的标准错误,比如SyntaxError``ReferenceError等等,然后列举了自定义error和assertError的实例及错误的捕获和处理的几种方式。

四种错误类型:

1.标准错误

这些错误在开发中都很常见,错误类型的有

  • SyntaxError js语法错误
  • ReferenceError 使用未定义变量时抛出
  • RangeError 当一个值不在指定范围内时抛出
  • TypeError 传递错误的参数类型时抛出
  • EvalError 调用eval()失败时抛出
  • URIError 当一个全局的URI函数被错误使用时抛出

2.自定义错误

使用Error构造函数抛出错误信息:

var a = 1;
if(a<2){
throw Error("less than 2");
}
console.log('last') //这里不会在执行

/Users/shaoc/svn/npmtest/src/tableheader/b.js:4
throw Error("less than 2");
^

Error: less than 2
at Error (native)
at Object.<anonymous> (/Users/shaoc/svn/npmtest/src/tableheader/b.js:4:9)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)

3.断言错误

当代码违反业务逻辑时,由assert模块触发

var assert = require("assert")
var a = 1;
assert(a > 10, "a不能小于10")
console.log('last')
assert.js:85

throw new assert.AssertionError({
^
AssertionError: a不能小于10
at Object.<anonymous> (/Users/shaoc/svn/npmtest/src/tableheader/b.js:5:1)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:509:3

4.系统错误

系统错误是对JavaScript错误Error对象的一个扩展,它们表示程序能够处理的操作错误,这些错误信息都是在系统级别生成的。系统错误实例中除Error实例中的属性外,还包括以下几个属性:

1、error.syscall - 一个表示失败的系统调用信息的字符串
2、error.errno - 一个整数的错误码
3、error.code - 表示错误字符串,通常是大写字母E开头

错误处理

  • node可以使用try catch 捕获异常,但是没有办法捕获到异步调用中发生的异常
  • 使用错误优先的回调函数,function(err, data) //优先处理错误信息
const fs = require('fs');
fs.readFile('一个不存在的文件', (err, data) => {
if (err) {
console.error('读取文件错误', err);
return;
}
// 其它处理
});
  • 使用事件机制捕获异常
const net = require('net');
const connection = net.connect('localhost');

// 为stream添加一个 'error' 事件处理器:
connection.on('error', (err) => {
// 如果连接被服务器重置或连接不到指定的服务器
// 或其它连接错误时,错误会被传递到这里
console.error(err);
});

connection.pipe(process.stdout);

//全局
process.on('uncaughtException', function (err) {
log.app.error("Caught exception:----->", err);
process.exit(8);
});
  • 使用domain