[TOC]
### Koa2 异常处理
* [ ] 自定义异常
![](https://box.kancloud.cn/be5655c81c13da9d8db0885d06cb9165_300x294.png)
>[danger] 定义一个全局异常处理类 http-exceptions.js
~~~
// 自定义异常
class HttpExceptions extends Error {
constructor(msg='服务器异常', errorCode = 0, code = 400) {
super()
this.msg = msg
this.errorCode = errorCode
this.code = code
}
}
// 资源未找到异常
class ResourceErr extends HttpExceptions {
constructor(msg='资源未找到', errorCode = 1, code = 404) {
super(msg, errorCode, code)
}
}
module.exports = {
HttpExceptions,
ResourceErr
}
~~~
*****
* [ ] 定义一个全局捕获异常中间件
![](https://box.kancloud.cn/22de4dcf2ee6532f48ca32865028bdd0_268x265.png)
~~~
const { HttpExceptions } = require('../core/http-exceptions')
// 全局异常捕捉中间件
const Exception = async (ctx, next) => {
try {
await next()
} catch(error) {
const { msg, errorCode, code } = error
const url = `${ctx.method} : ${ctx.request.path}`
if (error instanceof HttpExceptions) {
// 已知异常
ctx.body = { msg, errorCode, url }
ctx.status = code
} else {
// 未知异常
ctx.body = { msg: '服务器内部错误~', errorCode: 999, url }
ctx.status = 500
}
}
}
module.exports = Exception
~~~
*****
* [ ] 使用
~~~
const Router = require('koa-router')
const router = new Router()
const { ResourceErr } = require('../../../core/http-exceptions')
router.get('/api/v1/news/:id', (ctx, next) => {
// 自定义异常
throw new ResourceErr()
})
module.exports = router
~~~
- 序言
- ES6模块化
- node基础
- FS模块
- 常用变量
- crypto加密
- 基础
- 安装
- 中间件
- 架构
- 结构分层
- 配置
- 路由
- 安装路由
- 自动加载
- 获取参数
- 路由前缀
- 路由中间件
- 控制器
- 请求
- 请求信息
- 数据库
- mongoDB
- mongoDB原生语句
- mongoDB数据库角色
- mongoose连接数据库
- 自动记录时间戳
- 模型
- mongoose模型
- 定义
- 模型初始化
- 查询
- 新增
- 更新
- 删除
- 隐藏字段
- 模式
- 关联查询
- 复杂模型
- 仿知乎个人资料建模
- 关注与粉丝
- 视图
- 模板
- edge
- 日志
- 错误和调试
- 调试当前文件
- nodemon调试
- 异常处理
- Koa2错误处理
- 验证
- Koa验证器
- async-validator
- installation
- 安全
- 数据加密
- 杂项
- jwt
- koa-jwt
- env环境变量配置
- 上传
- 分页和模糊搜索
- 扩展
- nodemon
- bodyparser
- koaJsonError
- cross-env
- uuid生成唯一ID
- pope字符串模板引擎
- 命令行
- 部署
- 附录
- RESTfulApi
- Http动词
- 状态码
- 调用频率限制
- 按需查询字段
- restful分页