【編者按】本文作者為 Peter Wayner,主要介紹13款至精至簡(jiǎn)的 Node.js 框架,幫助你簡(jiǎn)化高速網(wǎng)站、豐富 API 以及實(shí)時(shí)應(yīng)用的開發(fā)流程。本文系國(guó)內(nèi) ITOM 管理平臺(tái) OneAPM 編譯呈現(xiàn),以下為正文第二部分。點(diǎn)此查看本文的第一部分。
Node.js 推出至今也有些年頭了,但它就像初生的太陽(yáng),充滿朝氣。人們不斷地探索更新更好的平臺(tái)信息發(fā)布方式,于是選擇也越來(lái)越多。這些努力最終催生了多款 Node.js 框架,不論是 Node.js 愛(ài)好者還是新手,都可以盡情探索,尋求新的提升。下文將介紹另外7款不錯(cuò)的 Node.js 框架。
7、Hapi

借助 Hapi 框架,可以搭建完整的網(wǎng)站。但是,很多 Hapi 用戶專注于用其打造從后臺(tái)抽取數(shù)據(jù),并快速高效地進(jìn)行發(fā)布的服務(wù)。每臺(tái)服務(wù)器只是一組映射的集合,這些映射將 URL 路徑對(duì)應(yīng)到生成結(jié)果的函數(shù),而這些路由則通過(guò) Hapi API 進(jìn)行配置,而不是寫入新代碼中。此外,Hapi 社區(qū)支持多種多樣的插件,可用于處理搭建服務(wù)時(shí)必要的身份驗(yàn)證、安全等問(wèn)題。
上圖展示了 Boom 插件正式判定的幾個(gè)標(biāo)準(zhǔn)化錯(cuò)誤,Boom 插件提供了一組工具,可以幫助用戶更好地了解可能出現(xiàn)的 HTTP 錯(cuò)誤。
Hapi 基于要求基本屬性的許可證發(fā)布,其 GitHub 地址在此。
8、Sails.js

如果你需要打造一個(gè)企業(yè)級(jí)的自定義 Web 應(yīng)用,Sails.js MVC 框架能幫助你處理許多應(yīng)用核心任務(wù),同時(shí)適應(yīng)性很高,能與其他工具協(xié)作。據(jù)其維護(hù)人員稱:Sails 不僅“無(wú)所謂前端環(huán)境”,而且能適配“任何數(shù)據(jù)庫(kù)”。并且,如果你使用該框架生成的標(biāo)準(zhǔn) REST API,其中的大部分實(shí)現(xiàn)過(guò)程都是自動(dòng)化的。如果你喜歡 Ruby 的慣例哲學(xué)以及 MVC 的分離特性,Sails 的一切會(huì)顯得似曾相識(shí),你也能很快上手。
上圖展示了一個(gè) Sails 應(yīng)用的基本目錄結(jié)構(gòu)。
Sails 基于 MIT 許可證發(fā)布,其 GitHub 地址在此。
9、StrongLoop

創(chuàng)建 API 的大部分工作都可以自動(dòng)化。一旦知道了數(shù)據(jù)模型,搭建用于數(shù)據(jù)編輯的工具在很大程度上只是練習(xí)而已。StrongLoop 自動(dòng)化了大部分此類操作,并添加了針對(duì)大多數(shù)大型數(shù)據(jù)存儲(chǔ),諸如 Oracle、MySQL 及 MongoDB,的連接器。此外,為了提高適應(yīng)性,他們不是支持隨時(shí)間變化的動(dòng)態(tài)數(shù)據(jù)模型,就支持帶有固定模式的靜態(tài)模型。這由你決定。此外,還提供了一個(gè)現(xiàn)成的安全層,具備訪問(wèn)控制表及一些不錯(cuò)的移動(dòng)服務(wù)。以上一切都是基于 Express 搭建的,因此,你要從 Express 的全部功能集入手。
上圖展示了 StrongLoop 的 API 探索工具。
對(duì)于測(cè)試項(xiàng)目,StrongLoop 可基于混合型開源許可證發(fā)布。其 GitHub 地址在此。
10、ActionHero

許多框架都把為全功能用戶提供高端支持設(shè)為目標(biāo),這些用戶往往運(yùn)行著瀏覽器、通過(guò) JSON 實(shí)現(xiàn)交互。ActionHero 不僅能實(shí)現(xiàn)這一點(diǎn),還在低端,通過(guò)有線協(xié)議與 TCP 直接通信。如果你需要比 JSON 更為簡(jiǎn)單的數(shù)據(jù)格式,這就非常方便了。此外,如果你想發(fā)送原始文件,這一機(jī)制也大有益處,因?yàn)?ActionHero 的發(fā)布方式與 CDN 類似,不會(huì)要求你運(yùn)行 Apache 或 Nginx。
上圖展示了 ActionHero 處理不同動(dòng)作以及與 Redis 連接的棧結(jié)構(gòu)。
ActionHero 基于 Apache 許可證發(fā)布,其 GitHub 地址在此。
11、Keystone.js

Express 與 MongoDB 是 Node.js 棧的關(guān)鍵組成部分。但是,你需要將二者結(jié)合,再添加一點(diǎn)新的功能,才能真正實(shí)現(xiàn)消息傳遞。Keystone.js 旨在聯(lián)結(jié) Express 與 MongoDB 以實(shí)現(xiàn)一個(gè)內(nèi)容管理系統(tǒng)。不過(guò),借助于 Keystone 提供的 Yeoman 框架構(gòu)建服務(wù),這一過(guò)程已經(jīng)大為簡(jiǎn)化。Yeoman 能幫助你填好文件,安裝好運(yùn)行博客或博文等內(nèi)容所需的所有組件。
上圖展示了一個(gè)使用 Yeoman 及 Keystone 搭建的圖片共享演示網(wǎng)頁(yè)的一部分。
Keystone 基于 MIT 許可證發(fā)布,其 GitHub 地址在此。
12、Sequelize

像 PostgresQL 或 MySQL 之類的 SQL 數(shù)據(jù)庫(kù)來(lái)自事務(wù)處理世界,你發(fā)出一個(gè)命令,進(jìn)而等待答復(fù)。而 Node 則建立于在 JavaScript 中頗為常見(jiàn)的異步回調(diào)架構(gòu)。Sequelize 將二者進(jìn)行了整合。當(dāng)你為其支持的五大數(shù)據(jù)庫(kù)中的任意一種創(chuàng)建 SQL 查詢時(shí),Sequelize 會(huì)發(fā)送查詢,并承諾在數(shù)據(jù)庫(kù)返回查詢結(jié)果時(shí)調(diào)用你的函數(shù)。它將舊世界與新的架構(gòu)命令(architectural imperative)進(jìn)行了聯(lián)姻。
上圖展示了如何重寫一條舊 SQL 查詢以適應(yīng) Node 摩登世界。
Sequelize 的源碼基于要求基本屬性的許可證發(fā)布,其 GitHub 地址在此。
13、Mean.io

實(shí)際上,Mean 并不是一個(gè) Node.js 框架。它是一組預(yù)先優(yōu)化過(guò)以協(xié)調(diào)運(yùn)行的框架與技術(shù)的集合。作為縮略詞,MEAN 實(shí)際上代表著 MongoDB, Express, Angular 以及 Node。每個(gè)組成成分本身都是 Node 生態(tài)系統(tǒng)中最流行的部分。當(dāng)它們聚集在一起時(shí),使用起來(lái)甚至更加方便。
上圖展示了 Node 包管理器如何安裝這些成分,以及用于開發(fā)應(yīng)用的一個(gè)新指令: mean。
組成 Mean 的各個(gè)成分有其自己的許可證以及源碼庫(kù)。
OneAPM 能幫助您輕松鎖定 Node.js 應(yīng)用性能瓶頸,通過(guò)強(qiáng)大的 Trace 記錄逐層分析,直至鎖定行級(jí)問(wèn)題代碼。以用戶角度展示系統(tǒng)響應(yīng)速度,以地域和瀏覽器維度統(tǒng)計(jì)用戶使用情況。想閱讀更多技術(shù)文章,請(qǐng)?jiān)L問(wèn) OneAPM 官方博客。
本文轉(zhuǎn)自 OneAPM 官方博客