[TOC]
# Node 框架
Web 和應用開發的風景變化是非常快速的,開發人員轉向快速框架和清潔項目交付(clean project delivery)。使用 node 框架的最大優勢是提供了高層級結構的盒子,你可以關注擴展您的應用程序而不是努力在建設上支出。
框架提供了多樣的特性,工作在不同的底層,試圖解決構建實時的常見問題,并解決了可伸縮的和復雜的 Web 應用程序在速度上的問題。在這篇文章里討論的框架是當今市場上最好的 node.js 框架。
## 整體架構
大多數 Node.js應用程序的整體架構:


## 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)