请说明 Koa 框架中异步错误处理的机制,并解释其底层的实现原理。
考察说明
考查对 Koa 中间件机制和异步错误捕获的理解。
回答思路
- 【回答框架 1】Koa 基于 async/await 和 Promise,中间件执行顺序如同洋葱模型。异步错误主要通过 Promise 的 rejection 传播。
- 【回答框架 2】Koa 内部使用 co 模块(或原生 async/await)将中间件包装成 Promise 链,任何未被捕获的 rejection 会沿着中间件链向上传递。
- 【回答框架 3】app.on('error') 事件用于捕获未被中间件处理的错误,默认输出错误信息,可自定义监听。
- 【回答框架 4】在中间件中使用 try/catch 包裹 await 调用,可以捕获异步错误并进行自定义处理,如返回错误响应。
- 【回答框架 5】未捕获的异步错误会导致 Promise 链拒绝,Koa 会终止请求并触发错误事件,避免进程崩溃。
- 【关键点 1】Koa 中间件基于 Promise 链,异步错误通过 Promise rejection 传播。
- 【关键点 2】使用 try/catch 或 .catch 方法捕获异步错误。
- 【关键点 3】全局错误处理可通过 app.on('error') 监听。
- 【关键点 4】错误未处理时 Koa 会返回 500 并记录错误。
- 【易错点 1】忘记使用 await 调用异步中间件会导致错误无法传递。
- 【易错点 2】在 promise 链中没有捕获 rejection 会导致意外行为。
- 【易错点 3】错误响应可能被多次发送,需要避免重复处理。