关于express与koa的使用对比详解

前端之家收集整理的这篇文章主要介绍了关于express与koa的使用对比详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

提到Node.js开发,不得不提目前炙手可热的2大框架express和koa。Express诞生已有时日,是一个简洁而灵活的web开发框架,使用简单而功能强大。Koa相对更为年轻,是Express框架原班人马基于ES6新特性重新开发的敏捷开发框架,现在可谓风头正劲,大有赶超Express之势。

Express和koa都是服务端的开发框架,服务端开发的重点是对HTTP Request和HTTP Response两个对象的封装和处理,应用的生命周期维护以及视图的处理等。

Express主要基于Connect中间件框架,功能丰富,随取随用,并且框架自身封装了大量便利的功能,比如路由、视图处理等等。而koa主要基于co中间件框架,框架自身并没集成太多功能,大部分功能需要用户自行require中间件去解决,但是由于其基于ES6 generator特性的中间件机制,解决了长期诟病的“callback hell”和麻烦的错误处理的问题,大受开发者欢迎。

以前其实写过一篇,但是后来发现里面有不少谬误. 所以一直惦记着纠正一下之前的错误,尤其关于中间件部分的对比.

这里的express就拿更加简单的connect代替

connect的执行流程

通常我们都说connect的中间件模型是线性的,也就是一个一个往下执行的,如下图:

这么说当然是没错的,但是当我们执行下面代码的时候可能会有那么一点小小的困惑:

当我们访问http://127.0.0.1:8080的时候,控制台会打印如下:

这么个结果跟我们上面的模型似乎有点出入,不是说线性的吗,为什么next后面的代码还会继续执行? 当然这个我们再之前已经有过结论了,有兴趣的可以详细瞧瞧,我们现在直接拿来结果,connect的中间件模型伪代码表示如下:

可以看到就是一层一层嵌套的回调,那么再把我们之前有点疑问的代码简化一下:

千万别被上面的回调绕晕了,就是很简单的回调函数,一切都解释的通了: 即使res.end之后,我们的代码还是要继续往下走的,可以这么说connect的中间件其实也是洋葱形的,但是因为作为同步代码,一般不回这么做罢了,那么上面我们可以重现描述一下connect的中间件模型了:

Koa的执行流程

同样我们再分析,也是说过Koa的中间件模型: 洋葱形

@H_404_13@

以下面代码为例:

访问服务,输出:

emm 貌似跟connect没差别,之前看过一篇文章,实验到这里得到了一个koa和express的中间件模型没差别的结论,包括我也是很迷惑,当然是有差别的,结论后面讲. 同样这里直接拿出koa中间件的简化模型:

我们知道async/await的作用是'同步化'异步操作(看上去如此,其实不是,但是我们不需要去管),那这里的Promise理所当然的被'同步'了,也就是说console.log(m3 end)的一切异步操作都可以'同步化'.

结论

说出结论之前我们其实可以想一下,既然connect的中间件也是洋葱形的,那么跟koa一样的用法似乎也没啥毛病,那么我来设想一下,我们的服务需要取数据库里的的一个用户假设是getUser吧,getUser当然是异步的. 分别来看看connect和koa的做法吧:

res.end(user)) }) // Koa app.use(async (ctx) => { const user = await getUser() ctx.body = user })

当然这么看似乎没啥差别. 那直接给出结论吧(憋): connect的中间件是同步,不会'等'其他异步操作,koa则可以'等'异步操作. 当然你不等也没啥问题.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对编程之家的支持

猜你在找的Express 相关文章