Koa2 是一款优秀的 Node.js 框架,比起其他框架,它更轻量、更易扩展、更具表现力。在 Koa2 开发过程中,异常处理和错误日志记录是十分重要的。本文将会详细介绍 Koa2 开发中的异常处理和错误日志记录。
异常处理
在 Koa2 中,异常处理方式有很多,例如使用 try-catch、使用 koa-json-error 等。这里我们将介绍一种比较实用的方式:使用 koa-error 中间件和自定义 error 类。
使用 koa-error 中间件
首先,在 app.js 中引入 koa-error 中间件。
const Koa = require('koa') const app = new Koa() const error = require('koa-error') app.use(error())
然后,在路由处理中抛出异常,koa-error 中间件会自行捕获并输出详细的错误信息。
-- -------------------- ---- ------- ----- ------ - --------------------- ----- ------ - --- -------- ------------------- ----- ----- ----- -- - --- - ----- ------ - ----- ----------- -------- - ------ - ----- ----- - ----- --- ------------ --------- - --
最后,我们可以使用 curl 命令访问 /test 接口,会得到以下响应:
{ "error": "Internal Server Error", "message": "error message", "statusCode": 500, "stack": "Error: error message\n at KoaRouter.<anonymous> (/Users/coco/Dev/koa-demo/src/routes/test.js:9:11)\n at dispatch (/Users/coco/Dev/koa-demo/node_modules/koa-router/lib/router.js:365:22)\n at Layer.handle [as handle_request] (/Users/coco/Dev/koa-demo/node_modules/koa-router/lib/layer.js:95:5)\n at next (/Users/coco/Dev/koa-demo/node_modules/koa-router/lib/router.js:341:10)\n at /Users/coco/Dev/koa-demo/node_modules/koa-body/lib/index.js:144:9\n at /Users/coco/Dev/koa-demo/node_modules/koa-compose/index.js:36:5\n at dispatch (/Users/coco/Dev/koa-demo/node_modules/koa-compose/index.js:28:10)\n at next (/Users/coco/Dev/koa-demo/node_modules/koa-compose/index.js:24:5)\n at /Users/coco/Dev/koa-demo/node_modules/koa-header/index.js:11:9\n at /Users/coco/Dev/koa-demo/node_modules/koa-compose/index.js:36:5" }
从响应可以看出,koa-error 中间件输出了详细的错误信息,方便我们快速定位和修复错误。
自定义 error 类
koa-error 中间件输出的错误信息不总是满足我们的需求,此时我们可以自定义 error 类来精细控制错误输出。
定义 FooError 类:
class FooError extends Error { constructor (msg) { super(msg) this.name = 'FooError' } }
使用自定义 error 类,可以在中间件中判断要输出错误信息的类型:
-- -------------------- ---- ------- ------------- ----- ----- -- - --- - ----- ------ - ----- ----- - -- ---- ---------- --------- - ------------------- ---------- -------- - - ------ ----------- - - ---- - ------------------- ----- ------- ----- --- - - --
这里,当捕捉到 FooError 错误时,会自动输出 { errno: 'error message' },而其他异常则通过 throw 继续向上传递。
错误日志记录
在实际开发中,我们有时需要将网站异常情况记录到日志中,来方便我们发现并分析问题。在 Koa2 中,可以使用 koa-logger 中间件和 koa-bunyan 模块来记录异常日志。
使用 koa-bunyan
koa-bunyan 是一个基于 bunyan 模块的 Koa 日志中间件,上手简单、使用方便。
首先,安装 koa-bunyan:
npm i koa-bunyan
然后,配置 koa-bunyan:
const Koa = require('koa') const koaBunyan = require('koa-bunyan') const bunyan = require('bunyan') const logger = bunyan.createLogger({ name: 'koa-demo' }) const app = new Koa() app.use(koaBunyan(logger))
最后,我们在路由处理中抛出异常:
-- -------------------- ---- ------- ------------------- ----- ----- ----- -- - --- - ----- ------ - ----- ----------- -------- - ------ - ----- ----- - ----------------- ----- --- ------------ --------- - --
这里,koa-bunyan 中间件会自动记录请求日志,并将错误信息记录到日志文件中。使用 bunyan 命令查看日志:
$ bunyan koa-demo-20211203.log
使用 koa-logger
koa-logger 中间件可以记录每一次 HTTP 请求,包括请求方法、请求路径、响应状态等信息。使用 koa-logger 中间件,可以大大方便调试。
首先,安装 koa-logger:
npm i koa-logger
然后,在 app.js 中引入 koa-logger 中间件:
const Koa = require('koa') const logger = require('koa-logger') const app = new Koa() app.use(logger())
koa-logger 中间件会在每一次请求时记录请求信息:
$ node app.js GET / <-- 200 OK (22ms) GET /favicon.ico <-- 404 Not Found (6ms)
当然,如果不想在每一次请求都记录日志,可以使用 conditionFn 配置项:
app.use(logger((ctx) => process.env.NODE_ENV === 'development'))
这里,只有在开发环境下才会记录日志。
总结
在 Koa2 开发中,异常处理和错误日志记录非常重要。异常处理不仅能够及时发现并解决问题,还能提高用户体验度;错误日志记录则能够方便我们快速查找并解决异常问题,同时也是完善项目的一部分。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649a9fbe48841e989478c5cd