hapi.js 實戰

《hapi.js 實戰》是2017.09.01清華大學出版社出版的圖書,圖書作者是[美] Matt Harrison 。

內容簡介

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

目錄

第I部分入門

第1章hapi簡介3

1.1hapi是什麼4

1.1.1hapi的特色6

1.1.2hapi是哪類框架8

1.2hapi的組成部分11

1.2.1伺服器13

1.2.2連線13

1.2.3路由13

1.2.4handler13

1.2.5外掛程式13

1.3何時應該(不該)使用hapi14

1.3.1何時應該使用hapi14

1.3.2何時不應該使用hapi15

1.4hapi的運作方式15

1.4.1安裝hapi15

1.4.2創建伺服器16

1.4.3添加路由16

1.4.4註冊外掛程式17

1.4.5運行hapi18

1.5獲得幫助18

1.5.1hapi.js網站19

1.5.2MakeMehapi19

1.5.3GitHub19

1.5.4IRC19

1.5.5StackOverflow20

目錄

1.5.6閱讀代碼20

1.6小結20

第2章構建API21

2.1設計API21

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.3sqlite3node模組24

2.3獲取和搜尋食譜25

2.3.1server.route()介紹25

2.3.2路由handler26

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模組化handler35

2.5身份驗證37

2.5.1模式和策略37

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

2.5.3使用用戶憑據40

XVIhapi.js實戰

2.6食譜創建和標星40

2.6.1測試接口40

2.6.2接口C:創建食譜41

2.7小結44

第3章構建網站45

3.1DinDin網站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.3server.views():使用Handlebars

動態渲染視圖53

3.2.4DRY視圖:布局和片段57

3.3使用外部API60

3.3.1使用Wreck:調用API60

3.3.2動態主頁62

3.3.3食譜詳情頁62

3.3.4視圖helper65

3.4管理登錄和用戶會話67

3.4.1hapi-auth-cookie外掛程式67

3.4.2表單69

3.4.3實現登錄71

3.4.4創建食譜75

3.4.5實現註銷78

3.5小結79

第II部分擴展工具箱

第4章深入理解路由和handler83

4.1深入理解路由83

4.1.1hapi的路由:路由的排序和

衝突處理83

4.1.2路由方法84

4.1.3參數化路徑85

4.1.4hapi如何選取路由88

4.2構建自定義handler90

4.2.1國際化例子91

4.2.2解析Accept-Language

header92

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.1request對象和生命周期113

5.1.1什麼是request對象113

5.1.2請求的生命周期115

5.1.3擴展點118

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

5.2reply接口和response對象121

5.2.1什麼是reply接口?121

5.2.2reply()的有效參數123

XVII

目錄

5.2.3response對象124

5.2.4使用流來回響126

5.3處理錯誤128

5.3.1程式設計師錯誤和操作錯誤129

5.3.2HTTP狀態碼129

5.3.3介紹Boom:創建HTTP

友好的錯誤131

5.3.4網站友好的HTML錯誤

頁面132

5.4小結136

第6章使用Joi驗證139

6.1介紹Joi140

6.1.1Joi的工作方式140

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

類型141

6.1.3一個更複雜的例子:驗證一個

複合類型142

6.2掌握Joi144

6.2.1了解API145

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

6.2.3Joi中的類型轉換146

6.2.4abortEarly選項147

6.2.5探索Joi錯誤148

6.3hapi中的驗證150

6.3.1使用Joi進行輸入驗證150

6.3.2驗證payload152

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.4Pingoo套用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手動設定header203

8.1.2在配置中設定快取策略203

8.1.3重新驗證和ETag204

8.2介紹Catbox:一個多策略的對象

快取庫207

8.2.1什麼是Catbox208

XVIIIhapi.js實戰

8.2.2Catbox客戶端和策略211

8.2.3Staleness213

8.2.4應該用哪個快取策略?215

8.3hapi套用中的伺服器端快取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.1hapi身份驗證概述226

9.1.2應該選擇哪種身份驗證

模式228

9.1.3身份驗證的scope228

9.1.4身份驗證模式229

9.2通過Bell實現第三方身份

驗證231

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

9.2.2Bell簡介232

9.2.3將Bell整合進hapi套用233

9.3通過CORS管理跨域請求240

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

請求241

9.3.2隻接受指定源的訪問243

9.3.3處理自定義的header244

9.3.4CORS和憑據(Cookie)246

9.3.5CORS設定的粒度247

9.4使用Crumb保護套用免受CSRF

攻擊248

9.4.1通過CSRF令牌對抗CSRF

攻擊249

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

CSRF250

9.4.3通過Crumb保護HTML253

9.4.4使用Crumb保護restful

API254

9.5安全相關的header255

9.6小結257

第10章使用Lab、Code和server.inject()

進行測試259

10.1Lab簡介259

10.1.1第一個測試260

10.1.2Lab作為本地依賴261

10.1.3通過experiments組織

測試262

10.1.4默認異步執行263

10.1.5Lab的語法糖264

10.2用Code斷言庫製作斷言265

10.2.1什麼是Code斷言庫265

10.2.2Code的語法:斷言語句的

結構267

10.3使用server.inject()測試hapi

服務269

10.3.1為測試準備server270

10.3.2server.inject()的回響

參數272

10.3.3使用requestpayload進行

測試272

10.3.4測試需要驗證的路由274

10.4Lab進階276

10.4.1reporter276

10.4.2代碼覆蓋率278

10.4.3linting278

10.4.4全局變數泄露279

目錄XIX

10.4.5並行執行測試279

10.5使用stub、spies和monkey-patching

測試難以測試的代碼281

10.5.1monkey-patching介紹281

10.5.2使用Sinon的Spy和stub284

10.5.3使用proxyquire286

10.6小結288

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

內容291

11.1hapi的日誌記錄和Good291

11.1.1hapi中的伺服器事件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和

descriptions299

11.2.2通過Lout自動生成的

文檔299

11.3監控302

11.3.1Graphite和StatsD302

11.3.2通過StatsD度量任何指標303

11.3.3使用Oppsy獲取hapi的操作

數據304

11.4調試307

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

不好307

11.4.2Nodedebug307

11.4.3NodeInspector309

11.4.4通過Poop進行Core

dumps310

11.4.5使用hapiTV調試實時

請求312

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

11.5.1TLS的配置項314

11.5.2在hapi中配置TLS連線315

11.5.3使用self-signed憑據測試

SSL315

11.5.4強制HTTPS317

11.6小結319

附錄ANode.js和npm入門321

附錄B本書用到的npm包327

相關搜尋

熱門詞條

聯絡我們