koa中异常处理

  1. 在根目录下创建middleWares文件夹,存放自定义中间件
  2. 在middleWares目录下创建exception.js异常处理中间件,来捕获异常
const {HttpException} = require('../core/http-exception')
const catchError = async (ctx, next)=>{
  try {
    await next()
  } catch (error) {
    if(error instanceof HttpException){
      ctx.body = {
        msg: error.msg,
        error_code: error.errorCode,
        requestUrl: `${ctx.method} ${ctx.path}`
      }
      ctx.status = error.code
    } else {
      // 未知异常处理
      ctx.body = {
        msg: 'we made a mistake',
        error_code: 999,
        requestUrl: `${ctx.method} ${ctx.path}`
      }
      ctx.status = 5000
    }
  }
}

module.exports = catchError
  1. 在app.js中注册异常中间件
const catchError = require('./middleWares/exception')
app.use(catchError)
  1. 在core文件夹下创建http异常处理逻辑文件http-exception.js
class HttpException extends Error{
  constructor(msg="服务器异常", errorCode=10000, code=400){
    super()
    this.errorCode = errorCode
    this.code = code
    this.msg = msg
  }
}

class ParameterException extends HttpException{
  constructor(msg="参数错误", errorCode="10000"){
    super()
    this.code = 400
    this.msg = msg
    this.errorCode = errorCode
  }
}

module.exports = { 
  HttpException,
  ParameterException
}
  1. 在路由中间中使用异常处理
    calssic.js
const Router = require('koa-router')
const { ParameterException } = require('../../../core/http-exception')
const router = new Router()

router.post('/v1/:id/classic/latest', (ctx, next)=>{
  const param = ctx.params
  const query = ctx.request.query
  const header = ctx.request.header
  const body = ctx.request.body
  if(true){
    const error = new ParameterException()
    throw error
  }
  ctx.body = {
    param,
    query,
    header,
    body
  }
})

module.exports = router
  1. 在postman中发送请求
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值