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

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的设计即可。

参考资料

  • https://github.com/koajs/koa/wiki
  • https://www.npmjs.com/package/koa-middlewares

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

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

原创文章,作者:Carrie001128,如若转载,请注明出处:https://blog.ytso.com/251244.html

(0)
上一篇 2022年5月2日
下一篇 2022年5月2日

相关推荐

发表回复

登录后才能评论