後面會繼續更新幾篇,具體目錄以下javascript
這些文章就是記錄點的東西,當筆記的,儘可能簡短實用;今天簡單寫一下假設eggjs開發一個api接口服務器,並根據各類狀況正確返回json格式,優雅的實現異常處理;java
咱們先本身實現一箇中間件來處理錯誤,下一個話題說如何避免造輪子git
這裏我本身建立middleware目錄,用於存儲中間件module.exports = options => {
return async(ctx, next) => {
try {
await next();
} catch (err) {
// 咱們就簡單的try catch處理一下異常,同實由於上述提到的第一種程序運行錯誤無status和statusCode,由於這裏有500處理
ctx.status = err.status || err.statusCode || 500;
ctx.body = {
message: err.message,
}
}
}
}
複製代碼
上述就是一個簡單的自定義錯誤中間件處理,經過這個中間件咱們能夠實現相似下圖的錯誤處理(這裏咱們在controller中經過koa自帶ctx.throw方法拋出403錯誤) github
但這個中間件有個小問題,在404時候的處理並不友好,並無知足要求返回json json
egg基於koa,這裏咱們不必重複造輪子,可使用社區一個優秀的輪子koa-json-err;感興趣能夠點擊連接去github閱讀更多api
// middlware/error.js
module.exports = require('koa-json-error');
複製代碼
// config/config.xxx.js中能夠配置
config.middleware = ['error'];
config.error = {
// 這裏使用appInfo.env來判斷環境,僅僅在非生產環境下打開堆棧信息,用於調試
postFormat: (e, { stack, ...rest}) => appInfo.env === 'prod' ? rest: { stack, ...rest}
}
複製代碼
綜上就是簡單介紹了一下egg中優雅處理各類異常的方式了;下一篇將簡單記錄下如何實現jwt認證服務器