如何正確選擇Node框架:Express、Koa還是Hapi

如何正確選擇Node框架:Express、Koa還是Hapi

簡介

Node.js是10年前首次推出的,目前它已經成為世界上最大的開源項目,在GitHub上有+59,000顆星,下載次數超過10億。流行度快速增長的部分原因是Node.js允許開發人員在應用程序的客戶端和服務器端部分使用相同的語言:JavaScript。Node.js是一個開源和跨平臺的JavaScript運行時環境,專為構建可擴展的服務器端WEB應用而設計,自身具有高併發、擴展性強等特點。由於社區其呈指數級增長和普及,因此創建了許多框架來提高生產力。在本文中,我們將探討Node.js中三個最流行的框架之間的差異:Express,Koa和Hapi。在以後的文章中,我們將研究Next,Nuxt和Nest。

比較基於以下幾點:

  1. GitHub Stars和npm下載
  2. 安裝
  3. 基本的Hello World應用程序
  4. 好處
  5. 缺點
  6. 性能
  7. 安全
  8. 社區參與

Express

Express是一個最小且靈活的Web應用程序框架,為Web和移動應用程序提供了一組強大的功能,它的行為就像一箇中間件,可以幫助管理服務器和路由

star

  • GitHub star:+43,000
  • npm每週下載 6,881,035

安裝

確保你已經安裝node和npm

// 你可以將express安裝到項目依賴
npm install express --save

// 如果要臨時安裝Express而不是將其添加到依賴項列表,則可以使用
npm install express --no-save

Hello World示例代碼

這是關於如何創建一個偵聽端口3000並響應“Hello World!”的快速應用程序的最基本示例

// 這裡只創建根目錄 其他目錄返回404 

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(port, () => console.log(`Example app listening on port ${port}!`))

好處

  • 幾乎是Node.js Web中間件的標準
  • 簡單,簡約,靈活和可擴展
  • 快速開發應用程序
  • 完全可定製
  • 學習曲線低
  • 輕鬆集成第三方服務和中間件
  • 主要關注瀏覽器,模板和渲染集成開箱即用

缺點

  • 組織需要非常清楚,以避免在維護代碼時出現問題
  • 隨著代碼庫大小的增加,重構變得非常具有挑戰性
  • 需要大量的手工勞動,因為您需要創建所有端點

性能

Express是對web應用的一層基本封裝,繼承了Node.js的特性

當天也有一些express性能的最佳實踐包括:

  • 使用gzip壓縮
  • 不要使用同步功能
  • 正確記錄(用於調試,使用特殊模塊,如調試,應用程序活動使用winston或bunyan)
  • 使用try-catch或promises正確處理異常
  • 確保您的應用程序使用流程管理器自動重新啟動,或使用systemd或upstartinit等系統
  • 在群集中運行您的應用。您可以通過啟動進程集群來大大提高Node.js應用程序的性能
  • 緩存請求結果,以便您的應用不會重複操作以反覆提供相同的請求
  • 使用負載均衡器運行它的多個實例並分配流量,如Nginx或HAProxy
  • 對靜態資源使用反向代理。它可以處理錯誤頁面,壓縮,緩存,提供文件和負載平衡等
  • 更多性能最佳實踐

一個簡單的“Hello World”應用程序每秒具有以下性能請求:

如何正確選擇Node框架:Express、Koa還是Hapi

安全

Node.js漏洞直接影響Express,因此確保使用最新的穩定版Node.js

  • 查看express 最佳安全實踐

社區參與

  • 貢獻者數量:220
  • Pull Requests:821
  • Express社區定期活動包括 Gitter,IRC channel, issues, Wiki等等

最後,express可能是Node.js最流行的框架,還有許多其他流行的框架都是基於Express構建的。

koa

Koa 是一個新的 web 框架,由 Express幕後的原班人馬打造,致力於成為web應用和API開發領域中的一個更小、更富有表現力、更健壯的基石。 通過利用 async 函數,Koa幫你丟棄回調函數,並有力地增強錯誤處理Koa並沒有捆綁任何中間件而是提供了一套優雅的方法,幫助您快速而愉快地編寫服務端應用程序

star

  • GitHub star:+25,000
  • npm每週下載:+ 300K

安裝

Koa需要nodev7.6.0以上版本支持,因為內部使用了ES6的特性

npm i koa
node my-koa-app.js

Hello World代碼示例

創建一個web服務,監聽3000端口返回‘Hello World’

const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
ctx.body = 'Hello World';
});

app.listen(3000);

好處

  • Koa提高了互操作性,健壯性,使編寫中間件變得更加愉快。
  • 集成了大量的web API,但是沒有綁定中間件
  • 非常輕量,核心的Koa模塊只有大約2K行代碼
  • 擁有非常好的用戶體驗
  • 通過try / catch更好地處理錯誤
  • 異步控制流,代碼可讀性更高

缺點

  • Koa社區相對較小
  • 與Express風格的中間件不兼容(目前還有遇到與其他框架兼容的中間件)

性能

Koa本身是一個非常輕量級的框架,可以構建具有出色性能的Web應用程序。代碼可讀性和維護性都相對較高

當然一些性能的最佳實踐也是必不可少的,例如:

  • 集群
  • 並行運行
  • 在代碼中使用異步API
  • 保持代碼小而輕
  • 以及使用gzip壓縮 等等

一個簡單的“Hello World”應用程序每秒具有以下性能請求:

如何正確選擇Node框架:Express、Koa還是Hapi

安全

Koa有大量的中間件,提供相應的功能 貼圖一張

如何正確選擇Node框架:Express、Koa還是Hapi

社區

  • 貢獻者數量:169
  • Pull Requests:577
  • 關於koa的一些討論

最後,Koa專注於核心中間件功能,設計顯式地利用了async/ waiting使異步代碼可讀性更高

Hapi

Hapi是基礎功能相對豐富的框架。開發人員更專注於業務,而不是花時間構建基礎架構。配置驅動的模式,區別於傳統的web服務器操作。他還有比一個獨特功能,能夠在特定的IP上創建服務器,具有類似的功能onPreHandler。再需要的時候你可以攔截特地的請求做一些必要的操作

star

  • GitHub Stars: +11000
  • npm 周下載: +222,293

安裝

確保你已經安裝node

npm install hapi

Hello World代碼示例

以下示例是使用hapi的最基本的hello world應用程序:

'use strict';

const Hapi=require('hapi');

// 創建一個服務監聽8000端口
const server=Hapi.server({

host:'localhost',
port:8000
});

// 添加路由
server.route({
method:'GET',
path:'/hello',
handler:function(request,h) {

return'hello world';
}
});

// 啟動服務
const start = async function() {
try {
await server.start();
}
catch (err) {
console.log(err);
process.exit(1);
}

console.log('Server running at:', server.info.uri);
};
start();

好處

  • 提供了一個強大的插件系統,允許您快速添加新功能和修復錯誤
  • 可擴展的API
  • 對請求處理有更深層次的控制。
  • 創建(REST)api的最佳選擇,提供了路由、輸入、輸出驗證和緩存
  • 一次編寫適配各端
  • 詳細的API參考和對文檔生成的良好支持
  • 與任何前端框架(如React,Angular和Vue.js)一起使用來創建單頁面應用程序
  • 基於配置的偽中間件
  • 提供緩存,身份驗證和輸入驗證
  • 提供基於插件的擴展架構
  • 提供非常好的企業插件,如joi,yar,catbox,boom,tv和travelogue

缺點

  • 代碼結構複雜
  • 插件不兼容,只能使用指定的插件如:catbox joi boom tv good travelogue等
  • 端點是手動創建的,必須手動測試
  • 重構是手動的

性能

2017年對Node框架的研究表明hapi相對於其他框架的表現最差

如何正確選擇Node框架:Express、Koa還是Hapi

一個簡單的“Hello World”應用程序每秒具有以下性能請求:

如何正確選擇Node框架:Express、Koa還是Hapi

安全

hapi安全性主要依賴於插件 插件選擇

  • Crumb反(XCSRF)驗證插件。它適用於常規請求和CORS請求
  • Joi:JavaScript對象的對象模式描述語言和驗證器
  • Hapi-rbac 用戶的訪問權限控制
  • Blankie 足夠靈活的白名單作機制
  • Cryptiles 加密庫

社區

  • 貢獻者數量:184
  • Pull Requests:1176

小結

Express仍然是當下最為流行,koa因擁抱ES6正在崛起,hapi還是大型項目的第一選擇。當然,不管是Express,Koa還是Hapi,這些都是目前非常成熟的框架,幾乎都能滿足你的需求,沒有最好,只有最合適


分享到:


相關文章: