Koa 和 Express 的区别
一、Express和Koa分别是什么?
Express
:
Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。
Koa
:
Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造, 致力于成为 web 应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石。 通过利用 async 函数,Koa 帮你丢弃回调函数,并有力地增强错误处理。 Koa 并没有捆绑任何中间件, 而是提供了一套优雅的方法,帮助您快速而愉快地编写服务端应用程序。
从两个官方的介绍中,我们可以得到这样子的信息:
Koa
和Express
是同一批人写的,他们是血亲;Koa
比Express
更加新。
好了,第一点我们都很好理解。第二点,我们就有点疑惑了!Koa
比Express
到底新在哪里呢?
emm,我们继续阅览Koa的官方文档我们可以发现这样子的信息:
Koa 依赖 node v7.6.0 或 ES2015及更高版本和 async 方法支持.
那么 这时候我们就想了,Express
最低支持Nodejs什么版本呢~
Express
官方网站上并没有明确指出最低的支持版本,但是我们从Express历史版本中找到了一些对依赖的介绍。我们发现,Express
作为一个成名很早的Nodejs web框架,他几乎是随着Nodejs的发展而逐步升级的!所以,我们可以认为Express
几乎支持任何版本的Nodejs!
好了,我们了解了对比的双方各是什么之后。我们就要来进入今天的主题!Express
和Koa
的区别了!
二、Express Vs Koa
2.1 编程模型的不同
使用过Express
的小伙伴应该对其中间件的概念不陌生吧!我们都知道Express
的中间接处理有点像排队!请求进入这个中间件"队列"会被一个一个的处理后返回响应。
Koa
在这点上就有所不同啦~下图就是一个很经典的描述Koa
模型
emm,我们可以看得出来,Express
和Koa
的第一个区别:
编程模型上的区别。Koa 的中间件是U型的,Express的中间件是线性的。
2.2 语言特性上的不同
Express
在处理中间件的时候,是使用回调函数。而熟悉javaScript的同学,在Promise没出来之前是深受回调地狱的困扰!而Koa
在一开始就注意到这个问题!使用了ES2015带来的新特性,让整个中间件处理很像同步代码~
2.3 功能不同
这里我引用Koa
github上的一个讨论:
Philosophically, Koa aims to “fix and replace node”, whereas Express “augments node”. Koa uses promises and async functions to rid apps of callback hell and simplify error handling. It exposes its own ctx.request and ctx.response objects instead of node’s req and res objects.
Express, on the other hand, augments node’s req and res objects with additional properties and methods and includes many other “framework” features, such as routing and templating, which Koa does not.
上面的这段话字面意思是说,Koa
是为了修复并且替代Nodejs。它使用Promises和async函数去解决回调地狱问题并且简化了错误的处理。Koa
用自己的处理请求和响应的对象替代Nodejs的。
Express
是为了增强Nodejs。它基于Nodejs增加了一些属性和方法,提供了路由和模板功能!这些恰恰是Koa
没有的!就如下图的对比一样!
因此我们可以认为,Koa
正如他的介绍身上说的那样,不依赖任何中间件。他比Express
更加轻便!
三、总结
我们总结一下。
Express
的优缺点:
优点:
- 功能全面,拥有路由、模板等框架常见功能;
- 不需要了解ES2015的知识就可以上手,学习成本低。
缺点:
- 回调地狱问题;
- 很难处理错误异常。
Koa
的优缺点:
优点:
- 没有回调地狱问题;
- 需要有es2015的知识基础,学习成本高!
如果,你是一个爱折腾的喜欢新事物的人。我觉得可以考虑一下Koa
!毕竟学无止境啊!骚年!加油吧!
– end –