Skip to content

错误处理

错误分为同步异常、Promise rejection、回调错误和 EventEmitter 的 error 事件。边界处捕获并转换为可观测、可恢复或可安全终止的结果。

async / await

js
try {
  const user = await findUser(id)
  return user
} catch (error) {
  logger.error({ err: error, id }, '查询用户失败')
  throw error
}

不要吞掉错误;需要降级时明确记录原因和返回的兜底值。可预期的业务错误可自定义 code,不要依赖错误消息字符串判断分支。

回调和事件

Node.js 回调通常遵循 error-first 约定:callback(error, result)。EventEmitter 若触发 error 而没有监听器,进程可能退出。

js
stream.on('error', (error) => {
  logger.error({ err: error }, '读取失败')
})

进程级事件

uncaughtExceptionunhandledRejection 只适合记录、停止接流量并有序退出,不能让已损坏的进程继续提供服务。修复根因,并在部署层通过进程管理器重启。

基于 MIT 许可发布