NodeJS 逐渐普及的步伐是因为它可以让你只使用 JavaScript 就可以建立大规模、实时性、可扩展的移动和 Web 应用程序。

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

随着节点生态系统的增长,框架也开始着手加快工作流程。有许多的 Node.js 框架,允许你构建实时的端到端网络应用,而无需任何其他第三方 Web 服务器、应用服务器、工具和技术。

通用性的 Node 框架就像快递,Koa 和 Hapi 更加灵活,让你做你想要的一切,最大限度的满足开发需求。但是,在最初你需要投入更多的努力,更加依靠开发者作出正确的决策。


Node.js的框架有哪些(名称字母顺序排序,无好坏排序):

ActionHero.js,Adonis.JS,

Derby.JS,

Egg.jsExpress.JS

Feathers.JS,Flatiron.js,Fortune.js,Frisby,

Hapi.JS

Keystone.JS,Koa.JS,Kraken.js,

Loopback.io,

Mean.io,Meatier,Meteor.JS,

Nest.JS,Nodal,

Restify.JS,

Sails.js,Socket.io,SocketCluster.io,SocketStream.JS,Strapi.io

Think.JS,Total.js,


Node.js框架对比及选型:

Express.JS  

Express.js通常被认为是Node.js的基本框架。它提供了一系列广泛的功能,用于构建API以及移动和Web应用程序。

Express.js是一个快速,轻量级的框架,提供了许多功能,包括模板引擎、数据库集成和多路由。

Express是一种流行的模型视图控制器(MVC)Node.js框架,具有快速、极简和灵活的优点,为Web和移动应用程序开发提供了强大的功能集合。它或多或少是在Node.js上编写Web应用程序的事实上的API。

它是一组路由库,提供了一层薄薄的基本Web应用程序功能,添加到讨巧的现有Node.js功能中。它侧重于高性能,支持强大的路由和HTTP帮助程序(重定向和缓存等)。它随带支持逾14个模板引擎的视图系统、内容协商以及用于快速生成应用程序的可执行文件。

此外,Express还随带大量易于使用的HTTP实用程序方法、函数和中间件,从而使开发人员能够轻松快速地编写可靠的API。几个流行的Node.js框架基于Express构建。

对于一个已经在使用 node.js 的开发人员来说,Express 或者"node.js express"并不是一个新鲜事。Express 框架提供了对 node.js 原生 API 的比较好的封装,从而使开发者更加容易地使用node.js。

Express 框架提供了用来开发强壮的 web/移动应用,以及 API 的所有功能。并且开发人员还能够方便地为它开发插件和扩展,从而增加 Express 的能力。下面列出了一些 Express 提供的基本的功能:

- 可以和任何的第三方数据库进行通讯

- 可以使用任何的用户认证方式

- 可以使用任何符合 Express 接口定义的模板引擎

- 可以按照需要定义工程目录

通过使用 Node Express,你可以使用更少的代码来实现功能。至少通过使用 Node Express,你可以实现中间件来响应 http 请求,可以定义路由表来定义对不同请求的响应函数,还可以使用模板引擎来输出 html 页面。

对于一个 NodeJS 开发新手来说,Express 还提供了如下的好处:1)Express的学习曲线并不陡峭,可以很快上手;2)Express 有非常庞大的社区,和组织良好的文档,新手可以很容易得到所需要的一切。

Express 根据 MIT 协议进行开源,目前 StrongLoop 对它提供支持。

你可以通过 Express 的官方网站 expressjs.com 获得更多的信息。

这个是使用最多的框架,也是各个推荐新手入门的框架。

Express 不对 Node.js 已有的特性进行二次抽象,只是在它之上扩展了 Web 应用所需的基本功能(个人感觉相当于node中的jquery)

封装了路由

静态资源托管

中间件的概念

内置了jade,ejs模板引擎

个人评价,express适合小型项目,不适合大型企业级项目,个人用用还可以,做为快速入门是个很好的选择,用过之后就可以考虑进入 koa 框架的道路


Socket.io  

Socket.io是一种快速可靠的全堆栈框架,用于构建实时应用程序。它为基于事件的实时双向通信而设计。

它支持自动重新连接、断开检测、二进制、多路复用和房间。它有一个简单方便的API,适用于所有平台、浏览器或设备(同样专注于可靠性和速度)。



Meteor.JS  

Meteor.js是一个全栈框架,允许您生成与Android、iOS和Windows平台兼容的跨平台代码。

Meteor.js与MongoDB集成,可以自动将数据更改直接传播到客户端,而无需任何同步代码。这是使用分布式数据协议和发布 - 订阅模式完成的,这使其成为最强大和动态的Web应用程序开发框架之一。

Meteor.js是一种超简单的全堆栈Node.js框架,用于构建现代Web和移动应用程序。它与Web、iOS、Android或桌面系统兼容。

它集成了用于构建连接客户端响应应用程序的关键技术集合、构建工具以及来自Node.js和整个JavaScript社区的一套精选的软件包。

Meteor 框架是 Node.js 上最出色的全栈框架。项目在 GitHub 上有 28K+ 的赞,拥有大量的自定义包,庞大的社区支持,非常好的教程和文档。在这个领域 Meteor 毫无疑问是王者,你可以用它构建纯 Javascript 的实时 Web 和 手机应用。

Meteor 最优秀的部分是,无论是服务器端的数据库访问,商业逻辑实现,还是客户端的展示,所有的流程都是无缝连接,开箱即用。整个框架使用统一的 API,Meteor API 同时适用于客户端和服务器端。

它使用的 DDP 协议可以让你在后端连接简单的数据库服务、企业数据仓库、甚至 IOT 传感器。Meteor 带有自己默认的栈,但又有足够的灵活性,可以让你选择自己的技术方案。如果你不需要尝试其他的框架或者没有其他的条件限制,你可以直接使用默认配置,进行快速地应用开发。

Meteor 拥有专业化的开发团队,顶级风投的大量资金支持,这都让 Meteor 能够时刻保持业界领先。

你可以通过 meteor.com 网站进一步了解 Meteor。


Koa.JS  

Koa.js是一个Node.js框架,它消除了使用ES6生成器的回调操作。Koa.js本质上非常灵活,因为它允许您为Web应用程序选择相关模块。

Koa.js是Express的开发人员构建的一种新的Web框架,使用ES2017异步功能。它旨在成为一种更小巧、更具表达力和更可靠的基础框架,用于开发Web应用程序和API。它使用promises和async函数,消除应用程序的回调地狱(callback hell),并简化错误处理。

想了解Koa.js和Express.js之间的区别,请阅读该文档:koa-vs-express.md。

koa是Express的下一代基于Node.js的web框架,目前有1.x和2.0两个版本。

为了支持ES的更高版本而开发的web级框架

KOA 是 node.js mvc 框架的后起之秀,在2013第四个季度才发布了第一个版本。开发 KOA 的人员基本来自 Express 开发团队,TJ Holowaychuk 是 KOA 开发团队的领导者。虽然 KOA 大部分开发人员来自 Express,但是他们使用了完全不同的技术来开发 KOA,并且 KOA 正成为 Express 一个强有力的竞争对手。

KOA 框架的核心是 ES6 的 generator。KOA 使用 generator 来实现中间件的流程控制,使用try/catch 来增强异常处理,同时在 KOA 框架中你再也看不到复杂的 callback 回调了。

KOA 框架本身非常小,只打包了一些必要的功能,但是它本身通过良好的模块化组织,让开发人员可以按照自己的想法来实现一个扩展性非常好的应用。

许多 JavaScript/Node.js 的忠实开发者都开始选择使用 KOA 来开发新的项目,因为 KOA 提供了更多的灵活性开发应用程序。

你可以通过koajs.com获取更多的信息。

koa 是比 express 思想更先进的框架,是express原班人马打造

koa解决的最大问题,利用async await的新语法特性,解决回调地狱的问题

koa 与 express 最大的不同,个人觉得有3点:

1.在于 handler 的处理方法,express 是普通的回调函数, koa 是利用ES7 中 Async/Await 的特性,没有回调,没有回调,就大大加速了开发速度这一点而言,已经足以让我们跪舔了

2.koa是洋葱中间件模式,执行到next的时候,会去调用下一个中间件,下个中间件执行完再接着执行上个中间件next下面的代码

3.koa把 request, response 封装到了同一个上下文对象 content

最为express的进化,确实带来更好的开发效率,成本只需要学西一下async await的新语法特性。可以说作为express框架的进阶框架是非常好的了


Sails.js  

Sails.js是Node.js的另一个强大的框架,也是最受欢迎的MVC框架之一。它用于构建自定义、企业级和实时应用程序。Sails.js是一个前端框架,允许您在很短的时间内构建实用且可用于生产的应用程序。

它具有强大的ORM(对象关系映射)解决方案和使用Waterline的数据库层,使其与大多数可用的Grunt模块兼容。

Sailsjs是一种基于Express的实时MVC Web开发框架,面向Node.js。它的MVC架构类似Ruby on Rails等框架的架构。但不同之处在于,它支持更现代的、数据驱动的Web应用程序和API开发。

它支持自动生成的REST API、与WebSocket轻松集成,并与任何前端兼容:Angular、React、iOS、Android、Windows Phone以及自定义硬件。

它拥有支持现代应用程序需求的功能。Sails特别适合开发聊天之类的实时功能。

Sails 作为一个非常稳固的 nodejs 框架,提供了建立任何规模的 web 应用所需要的所有功能功能。

Sails.js 在底层使用了 express框架来提供对 http 请求的处理,同时使用 Socket.IO 框架来处理WebSocket 请求。同时作为一个前端应用开发框架,它允许开发人员选择他/她熟悉的技术来开发应用。

同时 Sails.js 也通过 waterline 框架实现了 ORM 功能。通过这个功能,你的应用程序可以在不进行大的修改的前提下,就可以从一个后端数据库,切换到另外一个后端数据库(也可以是一个NoSQL数据库)。

Sails 特别适合用来开发对数据的实时更新有较高要求的应用,比如多人棋类游戏,单页web应用等等。如果你对 Ruby, Django 或者 Zend 有一定的了解,那么你将非常容易理解Sail中的概念。

简单来说,Sails.js 既给开发者提供了一个优秀的 MVC 框架,也提供了一定的灵活性,让开发者可以自主选择前端开发方式和后端的数据库。 Sails.js 是由 Mike McNeil 创建的,现在由 Treeline and balderdash 提供支持。Sails.js 在 MIT 协议下开源。

你可以在网站 sailsjs.org 上找到更多关于这个框架的内容。

是基于 exrpess 的大而全的框架,MVC框架,旨在模拟熟悉的Ruby on Rails框架的MVC模式,但支持现代应用程序的需求。捆绑了一个强大的ORM,即Waterline。自动生成的REST API


Mean.io  

Mean.js,也称为Mean.IO,是各种框架的组合,例如MongoDB、Express.js、Angular.js和Node.js.

Mean.js为Web应用程序开发提供了加速和简化的框架,因为它支持JavaScript的所有组件。

MEAN的全称是Mongo、Express、Angular(6)和Node,结合了一套开源技术,这些技术共同提供了一种从头开始构建动态Web应用程序的端到端框架。

它旨在提供一个简单而有趣的起点,用于编写云原生全堆栈JavaScript应用程序。它是另一种基于Express构建的Node.js框架。

Mean 是 Mongo DB,Express,Angular 和 Node.js 捆绑在一起的组合。基本上说只要有它,你就拥有了数据库层,服务器端和网页前端的整套工具,足以开发所有类型的现代网络应用。

Mean 是一个完整独立的包,它涵盖了应用开发的所有方面。尤其适合于那些需要快速开始开发的人。它内置多种技术而且在联合使用时变现非常好。可以用于创建任意大小和复杂度的应用。

使用 Mean,开发者可以避免经历混合和匹配不同的技术栈。通过 mean 栈,你可以减少安装和配置MongoDB,Express,Angular 和 Node.js需要的时间。Mean.io 的另一个巨大好处就是所有的栈都使用 JavaScript,服务器端 Express 对MongoDB 的访问(json)和通多 Angular 从 Node 到客户端。

在这里 - mean.io了解更多Mean.io的相关信息。

还有一个名为 mean.js 的 mean 分支也相当流行。


Nest.JS   

Nest.js是一种灵活的、通用的、渐进式的Node.js REST API框架,用于构建高效、可靠、可扩展的服务器端应用程序。它使用现代JavaScript,使用TypeScript构建。它结合了OOP(面向对象编程)、FP(函数式编程)和FRP(函数式反应编程)的元素。

它是一种开箱即用的应用程序架构,打包成一个完整的开发工具包,用于编写企业级应用程序。在内部它使用Express,并与另外众多库兼容。


Loopback.io   

LoopBack构建于Express.js之上,允许您实现可伸缩的API。LoopBack使用StrongLoop Arc来监控和部署应用程序,同时使用Swagger 2.0扩展内置API资源管理器,让您创建API文档。这使它成为Node.js中高度灵活和全面的Web应用程序开发框架。

LoopBack是一种高度可扩展的Node.js框架,让你在几乎不用编程的情况下就能创建动态的端到端REST API。它旨在使开发人员能够在几分钟内轻松构建模型并创建REST API。

它支持轻松的身份验证和授权设置。它还随带模型关系支持、各种后端数据存储、即席查询和附加组件(第三方登录和存储服务)。

nodejs作为Restful Api 开发分格的框架(接口开发)

项目搭建: 很好的介绍,就不做累述

https://cnodejs.org/topic/57e5b2859c495dce044f397c

其中使用strongloop来构建loopback框架。

是建立在 Express 基础上的企业级 Node.js 框架,只需编写少量代码就能创建动态端到端的 REST API,一致化的模型关系和对 API 访问的权限控制等


Keystone.JS  

Keystone.js广泛用于开发本质上由数据库驱动的Web应用程序、网站和API。

Keystone.js使用NoSQL数据库,如MongoDB。它使用Mongoose,这是一个领先的ODM包,可以连接到您的MongoDB数据库。

Keystone.js提供嵌入式服务、管理UI和身份验证。

KeystoneJS是一种开源、轻量级、灵活且可扩展的Nodejs全堆栈框架,基于Express和MongoDB构建。它用来构建数据库驱动的网站、应用程序和API。

它支持动态路由、表单处理、数据库构建块(ID/字符串/布尔值/日期/数字)以及会话管理。它随带一个漂亮的、可定制的管理UI,可以轻松管理你的数据。

有了Keystone,一切都很简单;你选择并使用适合自身要求的功能,替换不适合要求的功能。


Feathers.JS   

Feathers.js是一种实时极简的微服务REST API框架,用于编写现代应用程序。它结合了各种工具和架构,旨在从头开始轻松编写可扩展的REST API和实时Web应用程序。它也基于Express构建。

它可以在几分钟内快速构建应用程序原型,在几天内构建生产就绪的实时后端。它可以轻松与任何客户端框架集成,无论是Angular、React还是VueJS。此外,它还支持灵活的可选插件,以便在你的应用程序中实现身份验证和授权权限。最重要的是,诸多功能使你能够编写出简洁而灵活的代码。


Hapi.JS   

Hapi.js是Node.js最强大的框架之一。它功能丰富,功能强大。它用于构建与API和其他软件应用程序接口的应用程序。

Hapi.js提供诸如使用JOI的输入验证、缓存、日志记录、配置和错误处理等功能,所有这些功能都旨在构建具有干净代码并提供高性能的Web应用程序和API。

Hapi.js是一种简单、丰富、稳定、可靠的MVC框架,用于构建应用程序和服务。它用于编写可重用的应用程序逻辑,而不是构建基础架构。它以配置为中心,并提供诸多功能,比如输入验证、缓存、身份验证及其他必要功能等。

Hapi 是为数不多的不依赖于 Express 的 node.js 框架,现在甚至已经完全独立于 Express 了。在最近一段时间中,很多开发者选择了 Hapi 而非 Express,这使得它或多或少变为了 Express 的竞争对手。

Hapi 在众多 nodejs 的框架中并非一个老牌选手,然而它却成功的在这当中创造了自己的一个生态圈。Hapi 致力于完全的分离 node HTTP 服务器、路由以及业务逻辑,并更多的聚焦于如何尽可能的通过配置而非代码来控制东西。

Hapi 最初是由 Eran Hammer 以及在 Walmart labs 的团队为了工作需要开发的。其后便以极快的速度受到了欢迎,现在已在 MIT 许可下成为一个开源的框架,能够免费的被下载和使用。

迪士尼、雅虎、Pebble、beats 音乐以及 Walmart 这样的公司都在使用 HAPI 作为他们旗下一个或多个项目的网络应用框架,它的影响力便可见一斑了。

你能在 hapijs.com上找到更多关于 Hapi 的信息。


Strapi.io   

Strapi是一种快速、可靠且功能丰富的MVC Node.js框架,用于为网站/应用程序或移动应用程序开发高效安全的API。Strapi默认是安全的,它面向插件(每个新项目都提供一组默认插件),并与前端无关。

它随带一个嵌入式优雅、完全可定制、完全可扩展的管理面板,拥有控制数据的headless CMS功能。


Restify.JS  

Restify是一种利用连接样式中间件的Nodejs REST API框架。究其底层,它大量借鉴了Express。它经过了优化(尤其是针对自省和性能),用于构建语义正确的、充分利用REST的Web服务,这种Web服务可大规模用于生产环境。

重要的是,Restify用于支持外面众多庞大的Web服务,比如像Netflix这样的公司。


Adonis.JS   

Adonis.js是另一种流行的Node.js Web框架,简单而稳定,拥有优雅的语法。这种MVC框架提供了一个稳定的生态系统,以便从头开始编写稳定、可扩展的服务器端Web应用程序。Adonisjs采用模块化设计,它由多个服务提供者(service provider)组成,服务提供者是AdonisJs应用程序的构建模块。

一致、表达式的API便于构建全堆栈Web应用程序或微型API服务器。有一个文档完备的博客引擎,以便了解Adonis.Js的基础知识。


Kraken.js   

Kraken.js是一个基于Node.js的强大Web应用程序框架,提供动态配置。它为Node.js添加了一个安全层和一个结构,它扩展到Express.js上。

Kraken.js还提供安全性、应用程序生命周期事件和中间件功能。它有几个可以独立使用的模块,

这些模块包括:Lusca(用于应用程序安全性)、Kappa(一个用于NPM代理的模块)、Makara、Adaroatiron.js。


Flatron.js   

Flatron.js提供对所有用户都有用的现代资源和工具,其中一些可用于修改URL路由、创建模板、管理数据和插件。

Flatiron 框架背后的核心思想是让你能使用它所提供的组件以及一些第三方库构建你自己的全栈框架。很酷不是吗?我个人十分的喜欢这种方式。然而,这带来的是更高的复杂度,并有可能会被使用错误组件的开发者搞得一团糟。

你能称之为一个由多个相互独立的组件松散地组建起来的全栈 MVC 框架。Flatiron 框架支持Director,一个从头到脚都使用JavaScript 搭建起来的,并不需要任何依赖项的 URL 路由组件。

通过一个叫 Plates 的模板引擎,Flatiron 能够支持模版语言,然而数据管理是通过 json 实现的,并能与任何一种数据库一起使用。Flatiron 现在由 Nodejitsu 以及其他的社区成员在进行维护,并做的相当不错,是一个不那么流行却值得一看的框架。

你能在 flatironjs.org 上获得更多信息。


Mojito   

Mojito 由 Yahoo 开发并迅速取得成功。然而很快又带着关于框架的空前的成功坐到了冷板凳,就像Meteor 和 Mean stack 那样。

Mojito 同样是一个 MVC 应用框架,非常适合于创建使用 HTML5,JavaScript 和 CSS3 的高性能的网络和手机应用。Mojito 的根本目标是提供一个框架,该框架用于构建标准的基于跨平台的应用。使之可以同时运行在客户端和服务器端,并实现高性能。

你可以在 Yahoo 开发者网页—— mojito 获得更多信息。


Derby.js   

Derby.JS 跟它的直接竞争对手 Meteor、Mean.io、以及 Mojito 一样,也是一个全栈框架。它运行在 Nodejs + mongo + Redis 的上层。Derby 主要部分是一个叫做 Racer 的数据同步引擎,它能够让数据在数据库、服务器和浏览器之间的同步变得轻而易举。

Racer 的确能够让基于 Derby 框架的应用运行地更快,无论是在浏览器端还是服务器端,对于单页面应用来说,它都是一个完美的选择方案。Derby 经常被用来和业界老大 Meteor 进行比较,Meteor 项目已经开发了一段很长时间,因而能够提供更多的开箱即用的功能,使得在更短时间内开发复杂的 web 应用变得更加容易。

而 Derby 更适合于需要更快运行速度的应用,并且它的模块化方式能够让应用更灵活,更容易扩展。Derby 最近的发展有些缓慢,但它并没有出局,仍有改写 Nodejs 全栈框架游戏规则的潜力。

你可以通过 derbyjs.com 网站进一步了解 Derby。


Socket Stream  

SocketStream 是一个有趣的框架,专注于客户端和服务端数据的快速同步,它致力于前后端数据的实时更新。

它最大的特点是不严格要求你使用指定的客户端技术,也不限定数据库的 ORM。我趋向于将它和有同样功能的兄弟项目 Sail.js 做比较,它更适合做单页 web 应用,多用户游戏,聊天客户端,网络应用,交易平台以及所有的需要将数据从服务端实时推送到客户端的应用。

服务端和客户端使用 JSON 来传输数据,比较理想的是使用 websockets 在服务端事件发生时自动将数据推送到客户端,Socket stream 是由 Owen Barnes 创建,现在由 Paul Jensen 和团队维护,他们的工作让这个框架得到了应有的荣耀。 

SocketStream framework 在最近几月获得了很好的发展,未来一片光明。 

更多 SocketStream 信息请浏览 github 上的 - socketstream。


ThinkJS  

ThinkJS 是国内360团队推出的一款面向未来开发的 Node.js 框架,整合了大量的项目最佳实践,让企业级开发变得如此简单、高效。框架底层基于 Koa 2.x 实现,兼容 Koa 的所有功能


Egg.js  

Egg.js是《阿里旗下产品》基于Node.js 和 Koa的一个Nodejs的企业级应用开发框架,它可以帮助开发团队及开发人员降低开发和维护成本。Egg.js则是按照约定进行开发,奉行『约定优于配置』,具备提供基于Egg定制上层框架的能力、

高度可扩展的插件机制、内置多进程管理、基于Koa开发,性能优异、框架稳定,测试覆盖率高、渐进式开发、开发成本和维护成本低等特点。