Open jackieli123723 opened 4 years ago
核心是 ctx.response.redirect("/404")重定向到页面模板引擎
ctx.response.redirect("/404")
app.use(async (ctx, next) => { await next(); if(parseInt(ctx.status) === 404 ){ ctx.response.redirect("/404") } })
核心是把不存在的路由或者访问存在路由的状态码 用try ... catch捕获 然后ctx.app.emit()手动释放error事件,才能让app.on('error')监听函数监听到错误并输出到控制台
try ... catch
ctx.app.emit()
error
app.on('error')
global.errorHandlerCodeStatus = { OK : 200, BadRequest : 400, Unauthorized : 401, Forbidden : 403, NotFound : 404, RequestTimeout : 408, Gone : 410, UnprocessableEntity : 422, InternalServerError : 500, NotImplemented : 501, BadGateway : 502, ServiceUnavailable : 503 }; process.on('unhandledRejection', (reason, p) => { console.log("Unhandled Rejection at: Promise ", p, " reason: ", reason); }); process.on("uncaughtException", function (e) { console.log(e); }); //需求 把不存在的路由 也返回json const handler = async (ctx, next) => { try { await next(); } catch (err) { ctx.response.status = err.statusCode || err.status || 500; ctx.response.body = { message: err.message }; ctx.app.emit('error', err, ctx) //try catch 捕获了 使用ctx.app.emit()手动释放error事件,才能让监听函数监听到 } }; // 错误捕获 4xx or 5xx status codes const errorHandler = async (ctx, next) => { await next(); //way1 const originStatus = ctx.status const errorCodeList = Object.values(global.errorHandlerCodeStatus) let code = errorCodeList.filter((item) => { return item === parseInt(originStatus) }) //这里要排除正常请求 200 if(originStatus!==200 && code){ ctx.throw(code[0]) } //way2 // if(parseInt(ctx.status) === 404 ){ // ctx.throw(404) // } // if(parseInt(ctx.status) === 500 ){ // ctx.throw(500) // } } const main = ctx => { ctx.throw(502); }; app.use(handler); // app.use(main) //模拟抛出4xx or 5xx status codes app.use(errorHandler); //错误日志输出 app.on('error', (err, ctx) => { console.error('server error', err.message); });
koa2处理统一处理页面 和api接口4xx,5xx错误
koa2处理统一处理404页面
核心是
ctx.response.redirect("/404")
重定向到页面模板引擎koa2处理统一处理404 api接口 统一抛出json格式给调用端
核心是把不存在的路由或者访问存在路由的状态码 用
try ... catch
捕获 然后ctx.app.emit()
手动释放error
事件,才能让app.on('error')
监听函数监听到错误并输出到控制台