设置全局异常处理中间件
在开发中,为了及时的反馈信息,与前端对接好,异常处理,是后端必须去做的一种事情,反馈正确的信息,可以加快bug的解决
在 node中,由于基本都是异步方法,所以,为了能够处理好异步的异常,我们需要使用 async/await来解决
- 创建异常基类
// handle.js
class result extends Error {
constructor (msg, code) {
super()
this.msg = msg
this.code = code
}
}
module.exports = result
- 创建处理异常中间件
// 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
- 注册全局异常处理中间件
// 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
参考文章: