入门学习express好,还是koa好?
发布于 8 年前 作者 jsummer 7871 次浏览 来自 问答

这两个框架有什么不同?

27 回复

koa 2.0 憋这么我久了一直没发布,都没啥动静了。

入门express比较好,简单,koa要显得高级一些,要学的东西也多

@arden 是啊,小郁闷

@arden 看issue好像是说要等async/await稳定发布了koa2就发布了,现在还需要加–harmony

express 吧 对新人比较友好 <br> <br><p>来自吊吊的 <a href=“https://github.com/ihanyang/cnode-vue” target="_blank">cnode-vue</a></p>

个人拙见。

入门的话用Express1,这个因为和Node原生的WEB机制最接近,所以更简单易学,也有助于理解Node原生的WEB机制。 之后可以尝试一下Koa1,学习一下ES6,了解一下不大一样的开发思想。再之后Express2还是Koa2还是其他的就看自己的需求了。

Express和Koa两者的对比,用一句话来说的话就是:业务逻辑中并行异步逻辑多的话用Express,同步逻辑多的话用Koa。 详细一点的话,好多人从Express迁移到Koa是因为他们遇到的绝大多数的业务逻辑都是需要同步执行的,用Express的话要写大量的回调和Promise来保证代码同步执行,Koa可以不用写回调函数或Promise的嵌套,用“异步的写法”就可以实现同步的功能。 另外Express出得很早,Koa出得很晚,所以从Koa有好多设计恰好解决了Express在某些场景下存在的一些问题,同时Koa也用上了如Generator等ES6的新技术。

其实这些个技术也不能说哪个比哪个好,主要看应用在什么场景下,你可以说一个项目现阶段的API业务逻辑都是同步逻辑,所以Koa比Express更加适合,但是以后如果单个API的业务逻辑变得非常复杂,需要使用大量异步程序来优化性能的话,可能又要换回Express了。

Express和Koa都很快要普及2.0了。

@libook 其实我用express配合co thunkify,controller层的业务逻辑代码没有回调套回调了,感觉也挺清爽的,顶多就是多了个yield关键字而已

@fantasticsoul 也可以,多不了几行代码,看自己需求,我只是觉得懒得自己写co,既然Koa已经把co集成好了,我就直接用Koa就好了。

@libook 主要是express社区庞大,库多,上生产环境放心点,自己把玩的话,我也用koa,公司的项目还是express比较稳妥

@fantasticsoul 相信我,Koa比想象的成熟的多,我们公司的好几个主要项目用Koa1生产化应用一年多了,相当稳定了,用户量几百万,从来没有因为Koa出过问题。另外社区上大家都热衷于将Express的库移植到Koa上,也都挺成熟了,其实现在两个圈子差不多了。不过因为Koa一开始就用了ES6,所以他的库通常也都是ES6的,测试性能要好很多,let和const等指令也有效降低了Bug率。

@libook 好吧,那我下一个项目用开始用koa1,如果async await 提议落实为标准的话,我就可以很方便过度到koa2啦哈哈,明年7月才发布node8,本生v8好像已经实现了async await支持了,就是ecma委员会那帮老头还未开口,╮(╯▽╰)╭真是纠结

@fantasticsoul 所以论坛里大多数人都认为Koa仍然是实验性的、缺乏支持的、不稳定的玩具嘛?看到好几篇帖子在黑Koa。

@jsummer 有点笔误,Express是5.0要出来了,Koa是2.0要普及了。

express没有1和2的说法,这是常识

Express和Koa两者的对比,用一句话来说的话就是:业务逻辑中并行异步逻辑多的话用Express,同步逻辑多的话用Koa。

这句是错误的,Node.js都是异步的,不过Koa采用generator、async/await让异步写法写的像同步而已。所以不存在同步逻辑和异步逻辑的说法。 大家习惯同步写法,所以社区才努力往这个方向发展

@libook

实验性的、缺乏支持的、不稳定的玩具嘛

呵呵,用了新特性就是实验性质的,Node.js 7.2.1都发布了,从0.11之后就支持generator,现在都不算啥新概念了吧。

Koa 2.x早就很稳定了,现在都是小修小补,所以不存在缺乏支持的、不稳定的玩具

你确定那个黑Koa的人真的了解Koa么?

Koa 2.x的压测性能比Koa1以及express只强不弱

koahubjs,基于koa2的,新手必备,推荐。

From KoaHub.js

@i5ting Express哪个是笔误,我想写的是Express4和5,多谢指出。

抱歉我没有写明白,可能让你有所误解,Koa的设计可以让人在有大量同步逻辑的时候节省大量异步写法;当然现在新版Node支持的特性更多更好了,如果你不用Koa的话自己用generator、async/await的写在也可以这么做了,我很懒,所以如果Koa帮我做了这些事我就懒得自己写了,开发起来也快一些。

不存在同步逻辑和异步逻辑的说法

如果别人没说过的话可能是我自己造的两种说法,但实际应用的时候确实存在,这个可能我举几个例子比较好。 比如一个API要确保从数据库里读出一个数据,再往另外一个表中插入数据,完成后再返回给前端;这就是所谓的同步逻辑,必须要确保每一步执行完才能执行下一步,框架不提供简单的异步转同步的写法的话要自己封装回调函数、Promise、generator等等结构,Express将选择权留给开发者,并尽可能做了兼容,但Koa是直接将Generator集成到框架思想中,所以遇到这种前面必须执行完才执行后面的情况的话用Koa很省时省力。 再如一个API会同时从数据库中取出100条记录,分别处理,处理完再存回数据库;这里每一条记录的处理都是独立的,所以100条记录的处理实际上是可以异步同时进行的,这就是我所谓的异步逻辑。

当然我上面说的这些观点都不是绝对的,和业务需求、个人习惯有很大关系。

@i5ting 是啊,自己用了Koa很久了所以很纳闷,论坛里有好多帖子都在写Express和Koa的对比,但文章举的例子在我看来只是没有用好或者不适合用Koa而已。

总之呢,Express和Koa真的不是选择一个就好,而是两个迟早都要学一学,以后技术选型可以根据不同的需求选择用Express还是Koa,但只是对于初学者的话,推荐Express,不理解内部细节和ES6的话刚上来搞Koa会有点费解。

async await 是nodejs提供的语法,跟koa2没关系 在express里一样可以不用写回调函数或Promise的嵌套

如果是学习的话两个都可以,有了对比后再深入其中一个。

学nodejs的api最好,因为学api最有用。

koa3也只是彻底废除generator而已,现在koa2已经稳定了,没正式发布是因为现在async/await现在还处于harmony阶段没正式发布而已

@libook await Promise.all()

回到顶部