实战篇笔记 扫码点餐小程序云开发(二)


设置全局异常处理中间件

  • 在开发中,为了及时的反馈信息,与前端对接好,异常处理,是后端必须去做的一种事情,反馈正确的信息,可以加快bug的解决

  • 在 node中,由于基本都是异步方法,所以,为了能够处理好异步的异常,我们需要使用 async/await来解决

  1. 创建异常基类
// handle.js
class result extends Error {
  constructor (msg, code) {
    super()
    this.msg = msg
    this.code = code
  }
}

module.exports = result
  1. 创建处理异常中间件
// abnormal.js
const result = require('./handle.js')

const abnormal = async (ctx, next) => {
  try {
    await next()
  } catch (err) {
    const isresult = err instanceof result
    if (isresult) {
      ctx.body = {
        msg: err.msg
      }
      ctx.status = err.code
    } else {
      console.log(err)
      ctx.body = {
        msg: '服务器反生错误'
      }
      ctx.status = 500
    }
  }
}

module.exports = abnormal
  1. 注册全局异常处理中间件
// app.js
const abnormal = require('./config/abnormal.js')

app.use(abnormal)

统一返回给前端的 JSON 格式

// result.js
class result {
  constructor (ctx, msg='SUCCESS', code=200, data=null, extra=null) {
    this.ctx = ctx
    this.msg = msg
    this.code = code
    this.data = data
    this.extra = extra
  }
  answer () {
    this.ctx.body = {
      msg: this.msg,
      data: this.data,
      extra: this.extra
    }
  }
}

module.exports = result

参考文章:

KOA — 5. 全局异常处理


文章作者: April-cl
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 April-cl !
  目录