全书目录

第十三篇:Fastify 完全指南 —— 高速物流中枢宇宙

第十一章:错误处理 —— 异常件不能丢在传送带上

1 分钟 173 字 第 266 / 962 个阅读单元

物流中枢一定会遇到异常件:

  • 运单不存在
  • 包裹超重
  • 车辆没有通行证
  • 仓区内部故障

Fastify 的错误处理有两层:

#1. 在业务工位里主动抛错
js
fastify.get('/shipments/:id', async function (request, reply) {
  const id = request.params.id

  if (id !== 'S1001') {
    reply.code(404)
    throw new Error('包裹不存在')
  }

  return { id, status: 'found' }
})
#2. 在中枢级别统一收异常件
js
fastify.setErrorHandler(function (error, request, reply) {
  request.log.error({ err: error }, 'shipment failed')

  if (reply.statusCode < 400) {
    reply.code(500)
  }

  reply.send({
    ok: false,
    message: error.message,
    traceId: request.id
  })
})
#onErrorsetErrorHandler 的区别
text
onError
└── 更像“异常件监控岗”
    └── 适合记录、附加信息,不适合改业务错误本体

setErrorHandler
└── 更像“异常件统一处置中心”
    └── 适合决定最终返回给客户什么

再记一个稳定规则:

  • 要抛就抛 Error 实例
  • 不要 throw 'bad' 这种字符串

这样错误传播链才稳定。