node开发网站的web框架选择:hapi, express, restify与koa

nodejs,本来是用来开发网站的,但用它来写小工具真是好用到不行,反而用纯JS语法来开发一个整站,看起来不那么容易和靠谱。不过经过这么几年的发展,nodejs已经从0.12升级到了7.5(不得不说版本变化太快同样会给人“不稳定”的印象),大量框架纷纷发布,日益成熟。用来做web开发,应该是足够了。

比如现在想开发一个网站,可使用的框架有: Hapi, Express.js, Restify 与 Koa。

记得我刚开始学习nodejs建站时,网上全是express的文章,没办法,因为当时除了express,其他框架都还没出生,更别提推广了。

而express给我的印象,并不好。首先是他默认的模板引擎jade,让我很抵制——我并不认为有什么比html语法更具描述性,嵌套能力更强的文本标记语言了;其次是express太轻量级了,处理一个表单都要引入“中间件”,在我看来,处理表单(以及文件上传)不应该是一个web框架最基本的能力吗?偏偏要独立出来。基于这两个主要原因,一直没能将express学完。

restify,我也用过,人如其名,他主要是用来做restful的网络接口,要用来做整站(比如动态生成静态html, 处理文件上传等)那就是用错地儿了。

koa,看起来蛮新奇的,但koa2的断崖式语法升级(追求es6),让我不想使用它。es6都没完全成熟,就将一个依赖于es6的框架用于正式环境,总觉得心里不踏实。

再加上,koa的语法“简洁”得让我都不知道是不是 response 了,不符合我的开发习惯。

这几天打算学习nodejs服务端开发(总不能一直这么吊着吧?nodejs web开发是列入我的必学项的),于是打算从express与hapi中选一个。于是发现了一些有趣的事:

  1. npm install hapi,在node_modules中,只会发现一个目录:hapi;而npm install express则会发现,node_modules里多出了几十个目录:express-install. 这是由于express的架构造成的,它依赖于很多小功能包,结果让包目录变得拥挤不堪(当然,实际上占用的空间并不大)
  2. 这篇文章列举了hapi比express强的地方(作者观点),我个人还是比较认同
  3. 这篇文章则对比了上述框架的performance,其中表示 hapi 一直在垫底。。。
  4. 这篇文章愤而反击众多以benchmark测试来评判框架效率的作法

express被原作者TJ转手后,接手者strongloop并不想突出express,反而搞自己的web框架搞得有声有色,不得不说是express(以及很多被商业公司接手的开源框架)的悲哀啊

我打算拿hapi先试试,因为我的确不想引入这样那样的中间件。经我初步尝试,hapi虽然没有中间件的概念,但却有插件,比如:托管静态文件的inert,管理模板引擎的vision,用于登陆验证的hapi-auth-basic等等等等,只是与express不同的是,刚需插件以及绝大部分插件,都是hapi团队自己开发的,品质应该更有保障。

可以查看其入门教程:https://hapijs.com/tutorials,简单易懂

大家可以看一下:在hapi中实现文件上传。对比express,就像迷路的人突然发现了灯塔。

发表评论

电子邮件地址不会被公开。