內容簡介
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