node.js错误处理

在写Nodejs的时候,不太清晰关于错误要怎么处理,这里做了一个小实验,验证下自己的认知对不对:

  • 错误统一在一个地方进行处理即可
  • 抛出错误,程序不会继续往下执行
// case.js
function foo() {
  bar()
  throw new Error("I am an error from foo!")
  console.log('I am a log in foo.')
  return 'foo'
}

function bar() {
  throw new Error("I am an error from bar!")
  console.log('I am a log in bar.')
  return 'bar'
}

function start() {
  try {
    const t = foo()
    console.log('I am start!')
    console.log(`t: ${t}`)
  } catch(e) {
    console.log(e);
  }
}

start()

以上实验代码返回的结果:

Error: I am an error from bar!
    at bar (/Users/black_j/Projects/nodejs/lesson/error_handler/case1.js:9:8)
    at foo (/Users/black_j/Projects/nodejs/lesson/error_handler/case1.js:2:2)
    at start (/Users/black_j/Projects/nodejs/lesson/error_handler/case1.js:16:13)
    at Object.<anonymous> (/Users/black_j/Projects/nodejs/lesson/error_handler/case1.js:24:1)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
    at Function.Module.runMain (module.js:684:10)

把foo()里面的bar()注释,返回结果:

Error: I am an error from foo!
    at foo (/Users/black_j/Projects/nodejs/lesson/error_handler/case1.js:3:8)
    at start (/Users/black_j/Projects/nodejs/lesson/error_handler/case1.js:16:13)
    at Object.<anonymous> (/Users/black_j/Projects/nodejs/lesson/error_handler/case1.js:24:1)
    at Module._compile (module.js:643:30)
    at Object.Module._extensions..js (module.js:654:10)
    at Module.load (module.js:556:32)
    at tryModuleLoad (module.js:499:12)
    at Function.Module._load (module.js:491:3)
    at Function.Module.runMain (module.js:684:10)
    at startup (bootstrap_node.js:187:16)

从结果可以看出验证了自己之前的想法。