乐趣区

关于前端:koa2中HTTP错误处理

HTTP 谬误

拜访 Web 服务器或应用程序时,服务器收到的每个 HTTP 申请都会以 HTTP 状态代码进行响应。

HTTP 状态代码是三位数代码,分为 五个不同的类别

状态代码的类别能够通过它的第一个数字疾速辨认:

  • 1xx:信息
  • 2xx:胜利
  • 3xx:重定向
  • 4xx:客户端谬误
  • 5xx:服务器谬误

本章节侧重于从系统管理员的角度辨认和排除最常见的 HTTP 谬误 代码,即 4xx5xx 状态代码。

更多精彩内容,请 微信搜寻“前端爱好者 戳我 查看

客户端和服务器谬误概述

客户端谬误:或从 400 到 499 的 HTTP 状态代码是用户客户端(即 Web 浏览器或其余 HTTP 客户端)发送 HTTP 申请的后果。

只管这些类型的谬误与客户端相干,但理解用户遇到的错误代码对于确定潜在问题是否能够通过服务器配置修复通常很有用。

服务器谬误:或从 500 到 599 的 HTTP 状态代码,当 Web 服务器晓得产生了谬误或无奈解决申请时,它会返回。

错误处理

什么是错误处理

  • 编程语言或计算机硬件里的一种机制
  • 处理软件或信息系统中呈现的异样情况

异样情况有哪些?

  • 运行时谬误,返回 500
  • 逻辑谬误

    • 404 找不到
    • 412 先决条件失败
    • 422 无奈解决的实体

为什么要用错误处理?

  • 避免程序挂掉
  • 通知用户错误信息
  • 便于开发者调试

Koa 中错误处理

应用 koa 自带谬误机制处理错误

koa 中,通过 ctx.throw(状态码) 来抛出异样,也能够携带本人想提醒错误信息

// 这里咱们限度输出的 id 不能为正数,否则就抛出谬误
usersRouter.get('/:id', (ctx) => {if(ctx.params.id * 1 < 0) {ctx.throw(404, '这个用户太小了,找不到')
  }
  ctx.body = db[ctx.params.id * 1]
})

本人编写错误处理中间件

从上图咱们能够看出,返回的状态码为 404,错误处理信息也显示了。

Koa 默认的错误处理有个毛病:返回的是以文本模式的错误信息。在 Restful API 的最佳实际中,要求应用 JSON 格局返回信息。

如果咱们想要 JSON 格局的错误信息,咱们能够本人编写一个错误处理中间件,放在执行程序的最后面,来对前面执行的代码进行错误处理,并且返回 JSON 格局的错误信息。

所以咱们能够本人写一个中间件,放在执行程序的最后面,来对前面执行的代码进行错误处理

// 错误处理中间件
app.use(async (ctx, next) => {
  try {await next()
  } catch (error) {
    ctx.status = error.status || error.statusCode || 500
    ctx.body = {message: error.message}
  }
})

再次应用上例测试,则显示如下后果:

能够看到,错误信息就以 Json 的格局显示进去了

残缺代码

const koa = require('koa')
const bodyparser = require('koa-bodyparser')
const router = require('./routes/user')
const app = new koa()

app.use(async (ctx,next) => {
    try {await next()
    } catch (err) {
        ctx.status = err.status || err.statusCode || 500
        ctx.body = {message: err.message}
    }
})

app.use(bodyparser())
app.use(router.routes())

app.listen(3000)

应用错误处理中间件 koa-json-error 进行错误处理

koa-json-error 是一款比拟优良的错误处理中间件,这个中间件是专门为纯 JSON 的利用筹备的,十分合乎 RESTful API。

它还有许多丰盛的性能,比方:

  • 返回谬误堆栈信息到客户端,不便开发调试应用;
  • 还能够配置错误信息,哪条错误信息不想返回到客户端时,能够抉择禁用;
  • 还能够让 400 谬误和 404 谬误也返回 JSON。

装置 koa-json-error

npm install koa-json-error --save

应用 koa-json-error 的默认配置处理错误

const koa = require('koa')
const bodyparser = require('koa-bodyparser')
const jsonerror = require('koa-json-error')
const router = require('./routes/user')
const app = new koa()

// 应用 koa-json-error 中间件
app.use(jsonerror())

app.use(bodyparser())
app.use(router.routes())

app.listen(3000)

展现后果

参考文档:

  • https://zhuanlan.zhihu.com/p/84222021
退出移动版