如何选择Node.js Web的开发框架

Node.js是非常适合Web开发的,但是现在无论是一个网站还是一个Web App,都变成了包括很多不同部分的大型项目,比如前端、数据库、业务模块、功能模块等等。用Node.js从零开始开发web,对于大中型团队来说或许可以胜任,但是对于个人和小型团队来说就不现实了。这时候框架就成了Web开发的利器,对于个人发展几乎是必不可少的。那么如何选择Node.js Web开发框架呢?

首先,我们必须明白我们需要的是-

程序还是框架?

该程序是一个已经形成的应用程序。你需要的是为它搭建一个环境,添加配置,然后就可以运行了。框架是应用程序的骨架。在它成为应用程序并开始提供服务之前,您需要向它添加数据模型和业务逻辑。

事实上,对于Web开发来说,程序和框架的区别越来越模糊。比如几乎妇孺皆知的Wordpress,它是一个博客程序,但其丰富的插件和高度的定制化可以在很大程度上支持二次开发,丝毫不逊于某些PHP框架。我个人认为,如果重点是提供服务而不是掌握技术,那么像WordPress这样的程序就没有必要使用框架。

可惜因为Nodejs还很年轻,目前还没有WordPress这样的程序,所以在Node.js的开发中,如果想做出自己想要的作品,框架是必然的选择。如果是特定类型的应用,可以尝试一些开源程序,比如用Nodejs做博客,包括Hexo和Ghost。

Node.js Web框架有哪些?

Node.js中的Web框架分为API框架和Web应用框架。前者可以开发RESTful API,后者也可以开发RESTful API,但也包含了前端的模板、渲染等功能。

API框架的使用场景是为跨平台应用提供统一的数据模型,渲染由前端/客户端解决。目前,著名的API框架有

Restify(文档,Github,NPM)

action hero . js(NPM Github官方网站)

LoopBack(官网,Github,NPM)

弗里斯比(NPM Github官方网站)

fortune . js(NPM Github官方网站)

Web应用框架,顾名思义,就是构建一个由Web应用开发的框架。Web应用程序框架有两种风格。

一个是Sinatra风格,一个是Rails风格。Sinatra和Rails都是Ruby语言的Web框架,后者更有影响力和知名度。下面简单解释一下这两种风格的含义。

Sinatra风格指的是高度可配置和面向开发的自由。代表性的Nodejs Web框架有:

Express(官网,Github,NPM)由TJ开发,Node.js官方推荐

哈比神(官方网站,Github,NPM)

KOA . js(NPM Github官方网站)

Flaliron(官方网站,Github,NPM)

total . js(NPM Github官方网站)

火车头(官网,Github,NPM)

Rails风格指的是不重复自己和配置上的约定,严格遵循MVC结构。代表性框架有:

sails . js(NPM Github官方网站)

geddy(NPM Github官方网站)

compound js(NPM Github官方网站)原名railswayjs。

这两种风格孰优孰劣并不重要,完全取决于用户的喜好。

除了这两个Web框架,还有一个更大的框架,就是全栈框架,MEAN就是其中的代表。

刻薄?

MEAN指的是MongoDB+Express+angular . js+node . js,这个组合包括运行环境、数据库、Web框架、前端引擎。它被称为全栈框架。除了Node.js,其他都是可替换的,目标是创建一个从前端到后端都使用javascript的Web应用。

因为这个框架的完善,有人称之为LAMP的接班人。LAMP是PHP的典型运行环境,Linux+Apache+MySql+PHP,广泛应用于各种虚拟主机。

MEAN看似庞大,但其实要构建一个完整的现代Web应用,尤其是SPA(单页应用),这几个组件缺一不可,几乎每一个都是当前形势下的最佳选择,非常适合学习和从头开始构建新的Web应用。但由于实际业务的独特性,很可能会更换其组件,比如用Mysql替换MongoDB。所以学习它的原理和架构,构建自己的类MEAN框架也是一个选项。

作为个人和小团队来说,全栈框架MEAN基本够用,但是目前大部分全栈框架还包含一个特性,就是实时性。具有实时功能的框架也称为实时框架。

实时框架好吗?

实时框架(Real-time framework)是指包含webSocket的双向通信功能,能够实现服务器和客户端实时通信的框架。

服务器和客户端之间自由通信的需求一直存在,但由于HTTP协议本身的限制,诞生了Comet等替代方法,但即使这样也远谈不上实时。Node.js兴起后,另一种HTML5技术webSocket逐渐成熟。人们突然发现实时通信变得触手可及,于是webSocket技术被广泛应用于Node.js,其中最著名的模块就是socket.io,各种全栈框架也加入了实时特性,以满足更广泛的开发需求。

目前,有代表性的实时框架有:

流星(官网,Github,NPM)

mean . io(NPM Github官方网站)

德比(官方网站,Github,NPM)

SocketStream(官方网站,Github,NPM)

但说实话,目前能看到的实时通讯的应用场景并不多,大部分集中在聊天室、待办、实时图表、网络游戏等领域。在其他领域使用实时特性不仅没有必要,而且是对服务器资源的浪费。所以目前是否采用实时框架要看具体项目。

以上基本就是Node.js Web框架的现状。我相信读者看到它的时候已经有了选择哪个框架的想法。最后,我将介绍一个令人困惑的概念,并解释我的选择。

约曼?

当我第一次看到这个词的时候,我认为它与卑鄙有关。其实,它们是完全不同的两回事。YEOMAN由YO(脚手架)、grunt(构建工具)和bower(包管理器)组成,代表一个工作流,与框架开发的思维模式完全不同。具体介绍可以看这里。

YEOMAN可以实现和框架类似的目标,就是为构建Web应用做准备,但是是否采用YEOMAN就见仁见智了。我个人的看法是,学习YEOMAN本身需要大量的时间,有一定的学习门槛。至少目前使用框架开发还是比较经济的,而且如果将来YEOMAN普及了,再去学习也不迟,更何况有了一些Node.js项目的经验之后学习YEOMAN就容易多了。

其实我还是比较赞同YEOMAN的生成器+包管理器的模式,因为Node.js本身就提倡微模块的概念,就是功能再小也要模块化,甚至大模块也要拆分成小模块,然后用积木搭建应用。这可以完全解耦,对于不容易调试的Javascript来说,也有助于定位和修复应用中的问题。发电机就是这种思想的产物。通过选择不同的配置和选项,构建模块被组合在一起。但是,对于这种模式,大家还在实验中,并不急于在实践中应用。