1. Koa中自帶的錯誤處理
koa中,通過ctx.throw( 狀態碼 )來拋出異常, 也可以攜帶自己想提示錯誤信息
//這里我們限制輸入的id不能為負數,否則就拋出錯誤 usersRouter.get('/:id', (ctx) => { if(ctx.params.id * 1 < 0 ) { ctx.throw(404, '這個用戶太小了, 找不到') } ctx.body = db[ctx.params.id * 1] })
圖1 koa自帶錯誤處理結果
從上圖我們可以看出, 返回的狀態碼為404, 錯誤處理信息也顯示了。但是這不是我們想要的, 在Restful API的規定中, 我們盡量使用json格式返回信息
所以我們可以自己寫一個中間件, 放在執行順序的最前面, 來對后面執行的代碼進行錯誤處理
//錯誤處理中間件 app.use(async (ctx, next) => { try { await next() } catch (error) { ctx.status = error.status || error.statusCode ctx.body = { message: error.message } } })
可以看到, 錯誤信息就以Json的格式顯示出來了
2. 使用中間件koa-json-error來處理錯誤信息
1. 安裝koa-json-error
npm i koa-json-error --save
2. 使用
const error = require('koa-json-error')
app.use(error())
圖2 用koa-json-errorr處理錯誤信息
可以看出, koa-json-error返回的結果都是json格式, 而且信息非常全。但是有個stack字段非常長, 在生產階段我們是不需要返回的。所以, 我們需要在
生產環境下將它隱藏