如何選擇正確的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。
  • 比較基於:html

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

Express

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

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

    確保你已經安裝node和npm
    // 你能夠將express安裝到項目依賴
        npm install express --save
        
        // 若是要臨時安裝Express而不是將其添加到依賴項列表,則可使用
        npm install express --no-save
  • Hello Worldweb

    這是關於如何建立一個偵聽端口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}!`))
  • 好處express

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

    儘管Express.js是一個很是方便且易於使用的框架,但它有一些可能影響開發過程的小缺點。
    • 組織須要很是清楚,以免在維護代碼時出現問題
    • 隨着代碼庫大小的增長,重構變得很是具備挑戰性
    • 須要大量的手工勞動,由於您須要建立全部端點
  • 性能api

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

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

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

    2017年對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目前都是很是成熟的框架。幾乎都能知足你的需求,沒有最好,只有最合適

文章來源

哥倫比亞美女開發 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

本來鏈接

相關文章
相關標籤/搜索