参考答案:
express框架是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,主要基于 Connect 中间件,并且自身封装了路由、视图处理等功能。
koa是 Express 原班人马基于 ES6 新特性重新开发的框架,主要基于 co 中间件,框架自身不包含任何中间件,很多功能需要借助第三方中间件解决,但是由于其基于 ES6 generator 特性的异步流程控制,解决了 "callback hell" 和麻烦的错误处理问题。
两个框架都对http进行了封装。相关的api都差不多,同一批人所写。
express内置了许多中间件可供使用,而koa没有。
express包含路由,视图渲染等特性,而koa只有http模块。
express的中间件模型为线型,而koa的中间件模型为U型,也可称为洋葱模型构造中间件。
express通过回调实现异步函数,在多个回调、多个中间件中写起来容易逻辑混乱。
1// express写法 2app.get('/test', function (req, res) { 3 fs.readFile('/file1', function (err, data) { 4 if (err) { 5 res.status(500).send('read file1 error'); 6 } 7 fs.readFile('/file2', function (err, data) { 8 if (err) { 9 res.status(500).send('read file2 error'); 10 } 11 res.type('text/plain'); 12 res.send(data); 13 }); 14 }); 15}); 16
koa通过generator 和 async/await 使用同步的写法来处理异步,明显好于 callback 和 promise。
1app.use(async (ctx, next) => { 2 await next(); 3 var data = await doReadFile(); 4 ctx.response.type = 'text/plain'; 5 ctx.response.body = data; 6}); 7
Express
优点:线性逻辑,通过中间件形式把业务逻辑细分、简化,一个请求进来经过一系列中间件处理后再响应给用户,清晰明了。
缺点:基于 callback 组合业务逻辑,业务逻辑复杂时嵌套过多,异常捕获困难。
Koa
优点:首先,借助 co 和 generator,很好地解决了异步流程控制和异常捕获问题。其次,Koa 把 Express 中内置的 router、view 等功能都移除了,使得框架本身更轻量。
缺点:社区相对较小。
最近更新时间:2024-08-10