推荐答案
在 Koa 中,可以通过以下方式处理错误:
使用
try-catch
捕获同步错误:-- -------------------- ---- ------- ------------- ----- ----- -- - --- - ----- ------- - ----- ----- - ---------- - ---------- -- ---- -------- - ------------ --------------------- ---- ----- - ---
使用
ctx.throw
抛出错误:app.use(async (ctx, next) => { if (!ctx.user) { ctx.throw(401, 'Unauthorized'); } await next(); });
监听
error
事件处理全局错误:app.on('error', (err, ctx) => { console.error('server error', err, ctx); });
本题详细解读
1. 使用 try-catch
捕获同步错误
在 Koa 中,中间件函数通常是异步的。为了捕获同步错误,可以使用 try-catch
语句包裹 await next()
。如果 next()
抛出了错误,catch
块会捕获并处理它。通常,我们会设置 ctx.status
和 ctx.body
来返回错误信息,并通过 ctx.app.emit('error', err, ctx)
触发全局错误事件。
2. 使用 ctx.throw
抛出错误
ctx.throw
是 Koa 提供的一个便捷方法,用于抛出带有状态码和错误信息的错误。它会自动设置 ctx.status
和 ctx.body
,并且会触发全局错误事件。例如,ctx.throw(401, 'Unauthorized')
会返回一个 401 状态码和 "Unauthorized" 的错误信息。
3. 监听 error
事件处理全局错误
Koa 提供了一个全局的 error
事件,可以用来处理所有未被捕获的错误。通过 app.on('error', callback)
可以监听这个事件,并在回调函数中处理错误。通常,我们会在这个回调函数中记录错误日志或进行其他错误处理操作。
通过以上三种方式,可以在 Koa 应用中有效地处理错误,确保应用的健壮性和稳定性。