如何選擇正確的Node框架:Express,Koa還是Hapi?

Fundebug發表於2019-05-10

簡介

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

  • 比較基於:
    • GitHub Stars和npm下載
    • 安裝
    • 基本的Hello World應用程式
    • 好處
    • 缺點
    • 效能
    • 安全
    • 社群參與

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.js是一個非常方便且易於使用的框架,但它有一些可能影響開發過程的小缺點。

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

    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

  • 社群參與

    • 貢獻者數量: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?

  • 社群

    最後,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目前都是非常成熟的框架。幾乎都能滿足你的需求,沒有最好,只有最合適

文章來源

哥倫比亞美女開發 Liz

Twitter: @lizparody23

Liz is a self-taught Software Engineer focused on JavaScript, and Developer Relations Manager at NodeSource. She organizes different community events such as JSConf Colombia, Pioneras Developers, Startup Weekend and has been a speaker at EmpireJS, MedellinJS, PionerasDev, and GDG.

She loves sharing knowledge, promoting JavaScript and Node.js ecosystem and participating in key tech events and conferences to enhance her knowledge and network

原本連線

相關文章