ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ### egg resfulAPI 全局异常处理 ### 统一错误处理 * [ ] 文档:[https://eggjs.org/zh-cn/tutorials/restful.html](https://eggjs.org/zh-cn/tutorials/restful.html) ***** 1. 自定义一个异常基类 app / exceptions / http_exceptions.js ``` class HttpExceptions extends Error { constructor(msg='服务器异常', code=1, httpCode=400) { super() this.code = code; this.msg = msg; this.httpCode = httpCode; } } module.exports = { HttpExceptions }; ``` ***** 2. 定义全局异常处理中间件 app / middleware / error_handler.js ``` const { HttpExceptions } = require('../exceptions/http_exceptions'); module.exports = () => { return async function errorHandler(ctx, next) { try { await next(); } catch (err) { // 所有的异常都在 app 上触发一个 error 事件,框架会记录一条错误日志 ctx.app.emit('error', err, ctx); let status = err.status || 500; let error = {}; if (err instanceof HttpExceptions) { status = err.httpCode error.requestUrl = `${ctx.method} : ${ctx.path}`; error.msg = err.msg; error.code = err.code; error.httpCode = err.httpCode; } else { // 未知异常,系统异常,线上不显示堆栈信息 // 生产环境时 500 错误的详细错误内容不返回给客户端,因为可能包含敏感信息 error.errsInfo = status === 500 && ctx.app.config.env === 'prod' ? 'Internal Server Error' : err.message; } // 从 error 对象上读出各个属性,设置到响应中 ctx.body = error; if (status === 422) { ctx.body.detail = err.errors; } ctx.status = status; } }; }; ``` *****