hapi.js 實戰 hapi.js 实战

馬特·哈里森

  • 出版商: 清華大學
  • 出版日期: 2017-09-01
  • 定價: $408
  • 售價: 4.9$199
  • 語言: 簡體中文
  • 頁數: 329
  • 裝訂: 平裝
  • ISBN: 7302479771
  • ISBN-13: 9787302479772
  • 相關分類: Node.js
  • 此書翻譯自: hapi.js in Action

立即出貨

買這商品的人也買了...

商品描述

hapi.js是圍繞三個基本理念構建的Node.js開發框架。一是開發效率,hapi簡明的設置允許快速構建和運行應用;二是可維護性,hapi的模塊化設計方便了擴展和改進;三是靈活性,可用插件來擴展和自定義hapi的輕量級內核。

《hapi.js實戰一書緊貼實用,指導你使用Node.js和hapi.js框架來構建API、服務器和應用。開篇呈現一個通俗易懂的Node.js Web應用模型,從中可清晰瞭解hapi所扮演的角色。此後講解構建API並將其集成到Web應用的完整過程,將穿插介紹驗證、測試、身份驗證和部署等重要主題。最後討論如何構建性能卓越、安全可靠的應用。

主要特色:

Node應用設計的最好實踐

使用hapi構建API 

維護和擴展應用

使用插件擴展hapi 

在學習本書前,讀者應熟練掌握JavaScript技能。具有Node.js經驗有助於學習本書,但不是必需的。

作者簡介

Matt Harrison是hapi.js的核心貢獻者、Node社區活躍成員。

 

目錄大綱

第I部分入門

第1章hapi簡介3 

1.1 hapi是什麼4 

1.1.1 hapi的特色6 

1.1.2 hapi是哪類框架8 

1.2 hapi的組成部分11 

1.2.1服務器13 

1.2.2連接13 

1.2.3路由13 

1.2.4 handler 13 

1.2.5插件13 

1.3何時應該(不該)使用hapi 14 

1.3.1何時應該使用hapi 14 

1.3.2何時不應該使用hapi 15 

1.4 hapi的運作方式15 

1.4. 1安裝hapi 15 

1.4.2創建服務器16 

1.4.3添加路由16 

1.4.4註冊插件17 

1.4.5運行hapi 18 

1.5獲得幫助18 

1.5.1 hapi.js網站19 

1.5.2 Make Me hapi 19 

1.5.3 GitHub 19 

1.5.4 IRC 19 

1.5.5 Stack Overflow 20 

1.5.6閱讀代碼20 

1.6小結20 

 

第2章構建API 21

2.1設計API 21 

2.1.1你應該接受這個任務21 

2.1.2收集需求22 

2.1.3設計API接口22 

2.2準備工作23 

2.2.1工作目錄23 

2.2.2準備數據庫和样本數據23 

2.2.3 sqlite3 node模塊24 

2.3獲取和搜索食譜25 

2.3.1 server.route()介紹25 

2.3.2路由handler 26 

2.3.3接口A:獲取所有食譜28 

2.3.4接口A:搜索食譜30 

2.3.5接口B:獲取單一食譜31 

2.4編寫可維護的代碼32 

2.4.1模塊化路由32 

2.4.2用好server.bind():設置handler中的上下文33 

2.4.3模塊化handler 35 

2.5身份驗證37 

2.5.1模式和策略37 

2.5.2實現不記名token身份驗證38 

2.5.3使用用戶憑據40 

2.6食譜創建和標星40 

2.6.1測試接口40 

2.6.2接口C:創建食譜41 

2.7小結44 

 

第3章構建網站45

3.1 DinDin網站45 

3.1.1網站的樣子45 

3.1.2網站是如何運作的47 

3.1.3設置47 

3.2網頁和靜態內容服務49 

3.2.1靜態文件服務49 

3.2.2整個目錄服務51 

3.2.3 server .views():使用Handlebars 動態渲染視圖53 

3.2.4 DRY視圖:佈局和片段57 

3.3使用外部API 60 

3.3.1使用Wreck:調用API60 

3.3.2動態主頁62 

3.3.3食譜詳情頁62 

3.3.4視圖helper 65 

3.4管理登錄和用戶會話67 

3.4.1 hapi-auth-cookie插件67 

3.4.2表單69 

3.4.3實現登錄71 

3.4.4創建食譜75 

3.4.5實現註銷78 

3.5小結79 

 

第II部分擴展工具箱

 

第4章深入理解路由和handler 83 

4.1深入理解路由83 

4.1.1 hapi的路由:路由的排序和衝突處理83 

4.1.2路由方法84 

4.1.3參數化路徑85

4.1.4 hapi如何選取路由88 

4.2構建自定義handler 90 

4.2.1國際化例子91 

4.2.2解析Accept-Language header 92 

4.2.3第一個實現93 

4.2.4再次簡化94 

4.3服務器方法96 

4.4路由先決條件99 

4.4.1異步JavaScript的並發問題99 

4.4.2指定路由先決條件101 

4.4.3使用帶有先決條件的服務器方法102 

4.4.4多重串行先決條件103 

4.4.5並發先決條件:並行地運行任務105 

4.5管理文件上傳107 

4.5.1使用數據輸出:把文件內容讀入內存108 

4.5.2使用流輸出:以流的方式獲取文件109 

4.5.3使用文件輸出:把文件存儲到磁盤110 

4.5 .4額外的payload設置111 

4.4小結111 

 

第5章理解請求和響應113 

5.1 request對象和生命週期113 

5.1.1什麼是request對象113 

5.1.2請求的生命週期115 

5.1.3擴展點118

5.1.4應該使用哪個擴展點?121 

5.2 reply接口和response對象121 

5.2.1什麼是reply接口?121 

5.2.2 reply()的有效參數123 

5.2.3 response對象124 

5.2.4使用流來響應126 

5.3處理錯誤128 

5.3.1程序員錯誤和操作錯誤129 

5.3.2 HTTP狀態碼129 

5.3. 3介紹Boom:創建HTTP 

友好的錯誤131 

5.3.4網站友好的HTML錯誤頁面132 

5.4小結136 

 

第6章使用Joi驗證139 

6.1介紹Joi140 

6.1.1 Joi的工作方式140 

6.1.2一個簡單例子:驗證標量類型141 

6.1.3一個更複雜的例子:驗證一個複合類型142 

6.2掌握Joi144 

6.2.1了解API 145 

6.2.2 Joi.assert()和Joi.validate() 146 

6.2.3 Joi中的類型轉換146 

6.2 .4 abortEarly選項147 

6.2.5探索Joi錯誤148

6.3 hapi中的驗證150 

6.3.1使用Joi進行輸入驗證150 

6.3.2驗證payload 152 

6.3.3驗證響應155 

6.3.4使用failAction自定義驗證響應156 

6.4整合:使用hapi和Joi進行Web 表單驗證157 

6.4 .1如何工作158 

6.4.2創建骨架159 

6.4.3創建路由和視圖160 

6.4.4添加驗證163 

6.4.5在表單中渲染錯誤165 

6.4.6表單提交成功後的重定向167 

6.5小結168 

 

第7章使用插件構建模塊化應用169 

7.1插件思想169 

7.1.1插件的定義171 

7.1.2插件的作用172 

7.1.3把所有東西放進插件174 

7.1.4 Pingoo應用174 

7.2創建和加載插件176 

7.2. 1創建插件176 

7.2.2使用server.register()加載插件179 

7.2.3插件依賴180 

7.2.4使用選項配置插件182 

7.3使用Glue組合插件186 

7.3.1什麼是Glue?186

7.3.2創建一個清單187 

7.3.3使用Confidence工具實現智能配置190 

7.4插件通信193 

7.4.1全局的服務器配置193 

7.4.2通過server.expose()在插件中對外公開屬性195 

7.4.3使用事件系統196 

7.5小結200 

 

第8章充分利用緩存201 

8.1客戶端緩存202 

8.1.1手動設置header 203 

8.1.2在配置中設置緩存策略203 

8.1.3重新驗證和ETag 204 

8.2介紹Catbox:一個多策略的對象緩存庫207 

8.2.1什麼是Catbox 208 

8.2.2 Catbox客戶端和策略211 

8.2.3 Staleness 213 

8.2.4應該用哪個緩存策略?215 

8.3 hapi應用中的服務器端緩存216 

8.3.1配置客戶端216 

8.3.2使用server.cache()創建並使用Catbox策略217 

8.3.3緩存服務器方法219 

8.3.4使用鍵、分區和段來組織緩存數據220 

8.4小結222

 

第Ⅲ部分創建健壯的應用

 

第9章身份驗證和安全225 

9.1關於身份驗證的深度探討225 

9.1.1 hapi身份驗證概述226 

9.1.2應該選擇哪種身份驗證

模式228 

9.1.3身份驗證的scope 228 

9.1.4身份驗證模式229 

9.2通過Bell實現第三方身份驗證231 

9.2.1什麼是第三方身份驗證231 

9.2.2 Bell簡介232 

9.2.3將Bell整合進hapi應用233 

9.3通過CORS管理跨域請求240 

9.3.1允許來自任何地方的跨域請求241 

9.3.2只接受指定源的訪問243 

9.3.3處理自定義的header 244 

9.3.4 CORS和憑據(Cookie) 246 

9.3.5 CORS設置的粒度247 

9.4使用Crumb保護應用免受CSRF 攻擊248 

9.4.1通過CSRF令牌對抗CSRF 攻擊249 

9.4.2通過創建自己的漏洞來理解CSRF 250 

9.4.3通過Crumb保護HTML 253 

9.4.4使用Crumb保護restful API 254

9.5安全相關的header255 

9.6小結257 

 

第10章使用Lab、Code和server.inject() 進行測試259 

10.1 Lab簡介259 

10.1.1第一個測試260 

10.1.2 Lab作為本地依賴261 

10.1.3通過experiments組織測試262 

10.1.4默認異步執行263 

10.1.5 Lab的語法糖264 

10.2用Code斷言庫製作斷言265 

10.2.1什麼是Code斷言庫265 

10.2.2 Code的語法:斷言語句的結構267 

10.3使用server. inject()測試hapi 服務269 

10.3.1為測試準備server 270 

10.3.2 server.inject()的響應參數272 

10.3.3使用request payload進行測試272 

10.3.4測試需要驗證的路由274 

10.4 Lab進階276 

10.4.1 reporter 276 

10.4.2代碼覆蓋率278 

10.4.3 linting 278 

10.4.4全局變量洩露279

10.4.5並行執行測試279 

10.5使用stub、spies和monkey-patching 測試難以測試的代碼281 

10.5.1 monkey-patching介紹281 

10.5.2使用Sinon的Spy和stub 284 

10.5.3使用proxyquire 286 

10.6小結288 

 

第11章投入生產環境及更多相關內容291 

11.1 hapi的日誌記錄和Good 291 

11.1.1 hapi中的服務器事件291 

11.1.2通過request.log()和server.log()記錄日誌293 

11.1. 3通過Good記錄線上日誌和處理監控296 

11.1.4使用多種reporter實例297 

11.2為路由生成文檔298 

11.2.1路由的tags、notes和descriptions 299 

11.2.2通過Lout自動生成的文檔299 

11.3監控302 

11.3.1 Graphite和StatsD 302 

11.3.2通過StatsD度量任何指標303 

11.3.3使用Oppsy獲取hapi的操作數據304

11.4調試307 

11.4.1不要認為使用console.log() 不好307 

11.4.2 Node debug 307 

11.4.3 Node Inspector 309 

11.4.4通過Poop進行Core dumps 310 

11.4.5使用hapi TV調試實時請求312 

11.5部署支持SSL/TLS的應用314 

11.5.1 TLS的配置項314 

11.5.2在hapi中配置TLS連接315 

11.5.3使用self-signed憑據測試SSL 315 

11.5.4強制HTTPS 317 

11.6小結319 

附錄A Node.js和npm入門321 

附錄B本書用到的npm包327