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

摘要: Node三駕馬車。javascript

Fundebug經受權轉載,版權歸原做者全部。html

簡介

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

比較基於:java

  • GitHub Stars和npm下載
  • 安裝
  • 基本的Hello World應用程序
  • 好處
  • 缺點
  • 性能
  • 安全
  • 社區參與

Express

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

  • starweb

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

    確保你已經安裝node和npmnpm

    // 你能夠將express安裝到項目依賴
        npm install express --save
        
        // 若是要臨時安裝Express而不是將其添加到依賴項列表,則可使用
        npm install express --no-save
    複製代碼
  • Hello World小程序

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

    // 這裏只建立根目錄 其餘目錄返回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.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」應用程序每秒具備如下性能請求:

  • 安全

    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等
    • 端點是手動建立的,必須手動測試
    • 重構是手動的
  • 性能

    017年對Node框架的研究代表hapi相對於其餘框架的表現最差

    一個簡單的「Hello World」應用程序每秒具備如下性能請求:

  • 安全

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

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

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

最後Express仍然是當下最爲流行,koa因擁抱ES6正在崛起,hapi仍是大型項目的第一選擇

不論是Express,Koa仍是Hapi目前都是很是成熟的框架。幾乎都能知足你的需求,沒有最好,只有最合適

Choosing the right Node.js Framework: Express, Koa, or Hapi?

關於Fundebug

Fundebug專一於JavaScript、微信小程序、微信小遊戲、支付寶小程序、React Native、Node.js和Java線上應用實時BUG監控。 自從2016年雙十一正式上線,Fundebug累計處理了10億+錯誤事件,付費客戶有Google、360、金山軟件、百姓網等衆多品牌企業。歡迎你們免費試用

相關文章
相關標籤/搜索