Egg优雅的实现异常处理

目录

后面会继续更新几篇,具体目录以下javascript

  1. Egg优雅的实现异常处理
  2. Egg实现JWT鉴权

前言

这些文章就是记录点的东西,当笔记的,尽可能简短实用;今天简单写一下假设eggjs开发一个api接口服务器,并根据各类状况正确返回json格式,优雅的实现异常处理;java

为何须要错误处理

  1. 防止程序挂掉
  2. 告诉用户错误信息
  3. 方便开发调试,定位问题
  4. api接口服务器规定的返回数据结构

几种错误

  1. 程序运行错误 如500错误
  2. 开发本身抛出的异常错误
  3. 404错误

本身实现中间件

咱们先本身实现一个中间件来处理错误,下一个话题说如何避免造轮子git

egg demo的结构示意图
这里我本身建立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

postman中403测试结果

但这个中间件有个小问题,在404时候的处理并不友好,并无知足要求返回json json

404返回结果

避免重复造轮子

egg基于koa,这里咱们不必重复造轮子,可使用社区一个优秀的轮子koa-json-err;感兴趣能够点击连接去github阅读更多api

egg中使用koa中间件

// 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}
}
复制代码

使用中间后的404处理

总结

综上就是简单介绍了一下egg中优雅处理各类异常的方式了;下一篇将简单记录下如何实现jwt认证服务器

相关文章
相关标签/搜索