本文目录
不像 express 中在末尾处注册一个声明为 app.use(async (ctx, next) => { try { await next(); } catch (err) { ctx.status = err.status || 500; ctx.body = err.message; ctx.app.emit(\"error\", err, ctx); } }); 这样程序中任何报错都会收敛到此处。此时可以方便地将错误打印到页面,开发时非常便捷。 + ctx.app.emit(\'error\', err, ctx);
koa 也建议通过 app 来派发错误,然后通过监听 app 上的 app.on(\"error\", (err, ctx) => { /* 错误的集中处理: * log 出来 * 写入日志 * 写入数据库 * ... */ }); 一个错误捕获并打印到页面的示例: const Koa = require(\"koa\"); const app = new Koa(); app.use(async (ctx, next) => { try { await next(); } catch (err) { const status = err.status || 500; ctx.status = status; ctx.type = \"html\"; ctx.body = ` <b>${status}</b> ${err} `; // emmit ctx.app.emit(\"error\", err, ctx); } }); app.use(ctx => { const a = \"hello\"; a = \"hello world!\"; // TypeError: Assignment to constant variable. ctx.body = a; }); app.on(\"error\", (err, ctx) => { console.error(\"Ooops..\\n\", err); }); app.listen(3000); 通过
|