闲谈Node.js 的Koa框架和Express框架

HTML5 herman 123浏览 0评论

Koa 是一个基于 Node.js 平台的下一代 web 开发框架。网上对 koa 框架的学习教程并不多,因此我整理了一些关于 koa 框架的学习教程,方便大家学习!

koa简介

koa 是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升错误处理的效率。koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。

koa框架

koa2 完全抛弃了generator和co的做法,而是使用async/await来做异步开发。

koa和express的不同点

  • koa和express在表现上的一点不同是采用ctx一个参数来调用中间件,而不是express的req, res。
  • 然后是在中间件连接的方式上有所不同。express的设计是串联的,设计思路超级简洁。koa的某一个中间件可以自行选择之后中间件的执行位置的。

实例比较

比如一个服务器处理时间/日志的中间件的开发:

express的做法

request进来,记录时间到request._startTime上。绑定一个函数到response的'end','finish'以及response.socket的'error','close'事件上。那个函数会用当前时间和startTime做差,算出运行时间。

koa2的实现代码

const xTime = async (ctx,next)=>{  
	let start = new Date  
	await next()  
	ctx.set('X-Response-Time', (new Date) - start) + 'ms')
}

这是在功能开发上,在错误处理上的友好度就更高了。
没有特意抹黑express的中间件开发,那个express版的计时器是express自带的服务器日志中间件morgan的实现。

社区方面

express的社区还是大。koa本来就小,还被从koa1转koa2一折腾,就更小了。而现在koa2还在alpha版,koa及其插件的开发速度比较没有保证。你找到一个中间件,如果是express的,得转过来。如果是koa的,一般也得再转一次。比如我使用的passportjs,github有koa版koa-passport,就分koa1版本和koa2版本的,选择时得注意一下。

基于node.js的koa框架

koa2好用,设计上的确有优势。优势不在能实现更强的功能,而是可以更简单地完成功能。koa2社区远不如express,原因之一是~~因为koa2的正式版离发行估计还得3~6个月。~~koa的正式版是koa1。koa1在思想上与koa2是一致的,但是koa2的实现更漂亮。有koa1到koa2的中间件封装函数`koa-convert`。而一般通用的中间件都有koa版,或者能够轻松的转为koa版。

Express 和 Koa 最明显的差别就是 Handler 的处理方法,一个是普通的回调函数,一个是利用生成器函数(Generator Function)来作为响应器。往里头儿说就是 Express 是在同一线程上完成当前进程的所有 HTTP 请求,而 Koa 利用 co 作为底层运行框架,利用 Generator 的特性,实现“协程响应”(并不能将 Generator 等价于协程,在 V8 的邮件列表中对 Generator 的定义基本是 `coroutine-like`),然而 co 这个库对 Generator 的使用方法并非当初 Generator 的设计初衷。

express 适合入门选手,koa高不成低不就,学习一下其mw的设计即可。

参考资料

本文原文出处:业余草: » 闲谈Node.js 的Koa框架和Express框架