为了了解koa,可以先来了解下express。express为什么会被淘汰?express处理异步问题是通过回调函数实现流程控制的,可以想象如果异步多了就会造成回调函数的层次太深(callbakc hell回调黑洞),后面的测试和维护会变得非常困难,特别是异常的处理。express回调式的中间件机制是express被淘汰的主要原因
Koa特点:koa1基于Generator函数;koa2基于 async/await。
koa的出现是由于JavaScript语言支持了更多的特性(对ES6的支持),基于Generator函数的koa1使异步层次变得比较扁平(代码结构像同步)、异常更容易捕获处理,特别是基于yield的对于流程的控制更加灵活(整个流程在控制层面更加机动、灵活)。但是yeild关键字很容易让人困惑(koa1将Generator函数、迭代器、异步混合了,如果是多层次的流程跳跃就不容看出代码后面的业务逻辑)。
koa2是对koa1的改进(浏览器/node对ES6中async/await的支持)。koa2使用async/await处理异步问题更加直观、易理解
koa1中间件 koa2中间件node web框架发展历史express -> koa1 -> koa2,也是node支持特性的发展历史。对项目工程化非常有利
使用koa的时候一般都会使用其他模块,例如koa-router等。因为koa的源代码不多,所有的功能都是通过插件实现的
这是更好的参考: Koa 框架教程-阮一峰
网友评论