[TOC]
# Node 框架
Web 和应用开发的风景变化是非常快速的,开发人员转向快速框架和清洁项目交付(clean project delivery)。使用 node 框架的最大优势是提供了高层级结构的盒子,你可以关注扩展您的应用程序而不是努力在建设上支出。
框架提供了多样的特性,工作在不同的底层,试图解决构建实时的常见问题,并解决了可伸缩的和复杂的 Web 应用程序在速度上的问题。在这篇文章里讨论的框架是当今市场上最好的 node.js 框架。
## 整体架构
大多数 Node.js应用程序的整体架构:
![Node.js Application Architecture](https://box.kancloud.cn/d64e22b815f5008bd16dd300e6b93a10_1024x432.png)
![Vue 网站示例](https://box.kancloud.cn/b297e06dfccfca47c518d8bbbbd67241_681x243.png)
## AdonisJs
官网:https://adonisjs.com/
## Compound.js
官网:http://compoundjs.com
## Derby.js
官网:http://derbyjs.com/
Derby.JS 跟它的直接竞争对手 Meteor、Mean.io、以及 Mojito 一样,也是一个全栈框架。它运行在 Nodejs + mongo + Redis 的上层。Derby 主要部分是一个叫做 Racer 的数据同步引擎,它能够让数据在数据库、服务器和浏览器之间的同步变得轻而易举。
Racer 的确能够让基于 Derby 框架的应用运行地更快,无论是在浏览器端还是服务器端,对于单页面应用来说,它都是一个完美的选择方案。Derby 经常被用来和业界老大 Meteor 进行比较,Meteor 项目已经开发了一段很长时间,因而能够提供更多的开箱即用的功能,使得在更短时间内开发复杂的 web 应用变得更加容易。
而 Derby 更适合于需要更快运行速度的应用,并且它的模块化方式能够让应用更灵活,更容易扩展。Derby 最近的发展有些缓慢,但它并没有出局,仍有改写 Nodejs 全栈框架游戏规则的潜力。
## Egg.js
官网:https://eggjs.org/zh-cn/
核心的动态机制,可能会让你懵逼,但是它强制性的约定,写起来还是很愉快的。
## Express.js
官网:http://www.expressjs.com.cn
Express 框架提供了对 node.js 原生 API 的比较好的封装,从而使开发者更加容易地使用node.js。
Express 框架提供了用来开发强壮的 web/移动应用,以及 API 的所有功能。
通过使用 Node Express,你可以使用更少的代码来实现功能。至少通过使用 Node Express,你可以实现中间件来响应 http 请求,可以定义路由表来定义对不同请求的响应函数,还可以使用模板引擎来输出 html 页面。
目前 StrongLoop 对它提供支持。
示例:
```
// express_demo.js 文件
var express = require('express');
var app = express(); // express 是工厂函数,不是构造函数。它应该像普通函数一样调用,而不是与 new 一起使用。
app.get('/', function (req, res) {
res.send('Hello World');
})
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log("应用实例,访问地址为 http://%s:%s", host, port)
})
```
> [Koa/Express 定义含有冒号 (:) 的路由](https://github.com/isayme/blog/issues/40)
> [express() or new express()](https://stackoverflow.com/questions/53089495/express-or-new-express)
# foalts
https://github.com/FoalTS/foal
https://foalts.org
## Fastify
官网:https://www.fastify.io/
一个致力于用最少的开销和强大的插件架构提供最佳开发体验的 web 框架。它受到 Hapi 和Express 的启发,号称是目前最快的 web 框架之一。
## Flatiron.js
官网:http://flatironjs.org/
Node.js MVC 框架,flatiron 是一款 Node.js 和浏览器的框架组件,是一款构建现代化 web 应用适应性很强的框架。flatiron 提供比 Rails 类组件有更丰富配置的框架组件,允许开发者自己添加他们想要的功能组件。
通过一个叫 Plates 的模板引擎,Flatiron 能够支持模版语言,然而数据管理是通过 json 实现的,并能与任何一种数据库一起使用。Flatiron 现在由 Nodejitsu 以及其他的社区成员在进行维护,并做的相当不错,是一个不那么流行却值得一看的框架。
## Feathersjs
官网:https://feathersjs.com/
A framework for real-time applications and REST APIs
## Hapi
官网:http://hapijs.com/
Hapi 是为数不多的不依赖于 Express 的 node.js 框架。
Hapi 致力于完全的分离 node HTTP 服务器、路由以及业务逻辑,并更多的聚焦于如何尽可能的通过配置而非代码来控制东西。
Hapi 最初是由 Eran Hammer 以及在 Walmart labs 的团队为了工作需要开发的。其后便以极快的速度受到了欢迎,现在已在 MIT 许可下成为一个开源的框架,能够免费的被下载和使用。
迪士尼、雅虎、Pebble、beats 音乐以及 Walmart 这样的公司都在使用 Hapi 作为他们旗下一个或多个项目的网络应用框架,它的影响力便可见一斑了。
## koa2
官网:http://koajs.com
开发 koa 的人员基本来自 Express 开发团队,TJ Holowaychuk 是 koa 开发团队的领导者。虽然 koa 大部分开发人员来自 Express,但是他们使用了完全不同的技术来开发 koa,并且 koa 正成为 Express 一个强有力的竞争对手。
koa 框架的核心是 ES6 的 generator。koa 使用 generator 来实现中间件的流程控制,使用try/catch 来增强异常处理,同时在 koa 框架中你再也看不到复杂的 callback 回调了。
koa 框架本身非常小,只打包了一些必要的功能,但是它本身通过良好的模块化组织,让开发人员可以按照自己的想法来实现一个扩展性非常好的应用。
```
// 导入 koa,和 koa 1.x 不同,在 koa2 中,我们导入的是一个 class,因此用大写的 Koa 表示:
const Koa = require ('koa');
// 创建一个Koa对象表示web app本身:
const app = new Koa();
// 对于任何请求,app将调用该异步函数处理请求:
app.use(async (ctx, next) => {
await next();
ctx.response.type = 'text/html';
ctx.response.body = '<h1>Hello, koa2!</h1>';
});
// 在端口3000监听:
app.listen(3000);
console.log('app started at port 3000...');
```
> [《Koa2进阶学习笔记》](https://chenshenhai.github.io/koa2-note/)
## KeystoneJS
官网:http://keystonejs.com/zh/
KeystoneJS,以 Express 和 MongoDB 为基础搭建的 Node.js CMS 和 Web 应用程序平台。
具有以下特性:
Express.js 和 MongoDB:Keystone 会为你配置 express(node.js 上的 Web 服务器),用 Mongoose(领先的 ODM 包)连接你的 MongoDB 数据库
动态路由:Keystone 从设置 MV* 程序的最佳实践入手,让你管理模板、视图和路由变得更容易
数据库域:ID、String、Boolean、Date 和 Number 是数据库的构件。Keystone 以它们为基础实现了在现实工作中更实用的域类型,比如 name、email、password、address、image 和 relationship (及其它)
自动生成管理员界面:不管你在搭建应用程序,或者在生产环境中作为数据库内容管理系统时是否用它,Keystone 的管理员界面都能节省你的时间,让你管理数据更容易
编码更简单:有时即便做的事情简单,异步代码也会变得复杂。Keystone让简单的事情(比如在视图中显示之前加载数据)保持简单
表单处理:要验证表单、上次图片或用一行代码更新数据库?基于你已经定义的数据模型,Keystone 可以做到
会话管理:Keystone 自带了会话管理和认证功能,包括密码域的自动加密
发送 Email:借助 Keystone,你的应用程序可以轻松地设置、预览和发送基于模板的 email。它还集成了 Mandrill (Mailchimp 卓越的事务性 email 发送服务)
其它类似优秀框架还有:[total.js](http://www.totaljs.com/), [Geddy.JS](http://www.geddyjs.org/), [Locomotive](http://locomotivejs.org/), [Restify](http://restify.com/)。
## LoopBack
官网:https://strongloop.com/projects/
基于 Node.js 的一个开源的 API 框架,可以让 Node.js 应用方便的跟各种设备通过 API 进行互联。
## midway
官网:https://midwayjs.org/midway/
面向未来的 Web 全栈应用开发框架
## micro
官网:https://github.com/zeit/micro
Asynchronous HTTP microservices
## Moleculer
[Moleculer](https://moleculer.services) is a fast, modern and powerful microservices framework for[Node.js](https://nodejs.org/en/). It helps you to build efficient, reliable & scalable services. Moleculer provides many features for building and managing your microservices.
**Documentation**:[https://moleculer.services/docs](https://moleculer.services/docs)
## MEAN
官网:http://mean.io/
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 分支也相当流行。
## Meteor.js
[Meteor.js](https://www.meteor.com/) 是一组新的技术用于构建高质量的 Web 应用,提供很多现成的包,可直接在浏览器或者云平台中运行。
Meteor 框架是 Node.js 上最出色的全栈框架。项目在 GitHub 上有 28K+ 的赞,拥有大量的自定义包,庞大的社区支持,非常好的教程和文档。在这个领域 Meteor 毫无疑问是王者,你可以用它构建纯 Javascript 的实时 Web 和 手机应用。
此外,Meteor特别适合于那些想要构建实时web app的开发人员。所有从数据库到模板的app层都会自动更新。
包: https://atmospherejs.com/
## Nestjs
中文文档:[https://docs.nestjs.cn](https://docs.nestjs.cn/)
英文官方文档:[https://docs.nestjs.com](https://docs.nestjs.com/)
[让我们用 Nestjs 来重写一个CNode(上)](https://www.jianshu.com/p/f0a4944e8fb9)
## Nx
[https://nx.dev/angular/getting-started/what-is-nx](https://nx.dev/angular/getting-started/what-is-nx)
## restify
[restify](http://restify.com/) is a framework, utilizing [connect](https://github.com/senchalabs/connect) style middleware for building REST APIs.
## Sails.js
官网:https://sailsjs.com
Sails.js 可以帮助你很容易的构建企业级的 Node.js 应用程序。它被设计成类似 Ruby on Rails 的 MVC 架构,但风格更现代,支持面向数据的 Web 应用程序开发,特别适合用于实时的功能实现,如聊天。
Sails.js API 的脚手架和 Rails 的脚手架不同。它会为你的模型自动生成一个 RESTful JSON API,它支持 HTTP 和 WebSocket。默认情况下,你创建的每个控制器,都会获得自动创建的基本 CRUD 操作。
## Socket Stream
官网:https://github.com/socketstream/socketstream
一个有趣的框架,专注于客户端和服务端数据的快速同步,它致力于前后端数据的实时更新。
它最大的特点是不严格要求你使用指定的客户端技术,也不限定数据库的 ORM。我趋向于将它和有同样功能的兄弟项目 Sail.js 做比较,它更适合做单页 web 应用,多用户游戏,聊天客户端,网络应用,交易平台以及所有的需要将数据从服务端实时推送到客户端的应用。
服务端和客户端使用 JSON 来传输数据,比较理想的是使用 websockets 在服务端事件发生时自动将数据推送到客户端,Socket stream 是由 Owen Barnes 创建,现在由 Paul Jensen 和团队维护,他们的工作让这个框架得到了应有的荣耀。
SocketStream framework 在最近几月获得了很好的发展,未来一片光明。
## strapi
官网:https://strapi.io/
The open source Headless CMS Front-End Developers love.
## [Total.js](https://www.totaljs.com/)
# 微服务框架
[Moleculer](https://moleculer.services/)
# 参考
[node 库](http://www.fly63.com/nav/more/13)