簡介
rrestjs是在expressjs代碼的基礎上開發的node.js框架(這樣可以減少很多bug,同時要感謝expressjs作者 visionmedia無私的奉獻),不過整個框架結構已經完全改變了,屬性以及方法定義也是全新的,可以說是一個全新的node.js開發框架(不僅局限於web頁面的輸出)。rrestjs命名源自:ROA-Restful,面向資源和restful是rrestjs的宗旨,和expressjs不同的是expressjs是利用路由機制的,而rrestjs則完全根據用戶請求的uri去找尋控制器。
特點
1、Restful模式:去掉了expressjs的app.get()路由機制,重新拆分客戶端請求的uri,直接載入指定模組和執行模組內的方法,如果出錯輸出500或404。比如用戶訪問/user/face,訪問頭像頁面,則rrestjs會根據拆分的uri去指定目錄require('user')模組,然後執行face方法,省去了正則路由判斷,提升性能。
2、原生node.js的API風格:沒有expressjs自己封裝的app.use等等,輸出一個HelloWorld只需如下代碼,降低了學習新代碼風格的成本:
var http = require('http'),
rrest = require('rrestjs'),
server = http.createServer(rrest(function (req, res) {
res.end('hello world');
})).listen(3000);
3、開發模式自動保存重啟:在開發模式下,支持像PHP那樣的寫代碼,保存自動重啟,放棄ctrl+c 然後 上+enter。
4、多進程共享session:多進程可以共享保存在記憶體中的session數據,而且以後部署上生產環境,只需載入不同配置檔案,無需改動代碼即可支持mongodb的session存儲
5、提高靜態檔案輸出性能:expressjs在靜態檔案輸出上由於加上Etag或last-modify快取,需要2次I/O操作,rrestjs在此基礎上做了2級快取,減少一次I/O操作,性能提升10%。
6、多進程多任務管理:可以讓多進程監聽多連線埠,做不同業務,由一個守護進程守護,萬一發現子進程意外掛掉,可以馬上喚醒它,並且還是繼續監聽之前的連線埠和做之前的業務。
7、封裝了mongodb連線池:封裝了mongodb的連線池,可以手動的設定連線池的大小,大大提高的效率和穩定性。
8、IP和資源白名單過濾:增加了白名單功能,方便項目上公網以後的調試和測試。
9、增加jade的html快取:增加html快取功能,加速大並發,高I/O的輸出jade模版,同時設定了更新快取鑰匙機制,防止快取重建時的雪崩情況。
10、增加deflate和gzip:根據content-type的屬性值,選擇性的使用delate或gzip壓縮數據回響給客戶端,因為圖片的gzip意義不大。
11、自動載入模組:根據自動載入例外的配置,去自動載入modules資料夾下的所有模組,不必一個個require了
主要功能
功能 | rrestjs |
架構思路 | ROA,面向資源架構 |
封裝程度 | 輕度封裝,配置簡單,最小化污染命名空間,易於2次開發 |
自定義開發、生產環境 | 載入不同配置檔案 |
http,https伺服器 | 原生node.js API支持 |
Favicon | 根據配置自動處理/favicon請求 |
IP過濾訪問 | ip黑白名單,訪問路徑白名單 |
靜態檔案 | 自動回響靜態檔案 |
請求路由 | Restful風格,拼裝URI |
404、500 | 出錯自動回響404、500 |
Get參數 | req.getparam獲取get請求的參數對象 |
DEL參數 | req.delparam獲取get請求的參數對象 |
POST參數 | req.postparam獲取get請求的參數對象 |
PUT參數 | req.putparam獲取get請求的參數對象 |
檔案上傳 | req.file獲取上傳的檔案對象 |
簡單session | 支持記憶體存取session |
多進程session | 支持多進程存儲session同步共享 |
資料庫session | 支持mongodb存儲session,並且無需修改代碼 |
客戶端IP位址 | req.ip獲取客戶端請求地址 |
request封裝 | 對request對象進行封裝 |
response封裝 | 對response對象進行封裝 |
json | 可以直接res.json回響json字元串 |
delate,gzip | 根據配置檔案可以對回響進行delate和gzip壓縮 |
快取 | etag,last modify, cache |
模版 | jade, ejs |
模版快取 | 模版靜態快取,分頁快取多張 |
日誌功能 | log4js,可以分等級分大小 |
多進程 | 內置ClusterPlus,可以多進程監聽多連線埠任務 |
容錯 | 可以自動重啟掛掉的子進程,並且還是監聽之前的連線埠,做之前的事情 |
高效開發 | 讓開發者像php那樣開發node.js檔案,免去頻繁手動重啟的麻煩 |
資料庫連線封裝 | 利用mongodb-native封裝了MongoDB資料庫的連線,只需配置自動連線,同時支持IP連線埠連線和字元串連線 |
資料庫連線池 | 增加連線池的概念,防止資料庫因過多連線而奔潰,同時可以提高db連線速度 |
css和js | 整合壓縮css和js,讓請求更少,效率更高 |
less | 支持lesscss的前端css樣式表 |
自動載入模組 | 根據配置自動載入指定資料夾下的模組,保存在rrestjs.mod對象中 |
自動部署 | 會根據配置檔案自動在baseDir目錄下生成各類快取靜態檔案目錄 |
檢測 | 在啟動套用的時候,將自動檢測配置檔案是否完好合法,加快開發者debug速度 |