hapi.js 實戰( 簡體 字) | |
作者:[美] Matt Harrison 著 梁宵 郭美青 翟懿博 譯 | 類別:1. -> 程式設計 -> 網路編程 -> Node.js |
出版社:清華大學出版社 | 3dWoo書號: 47825 詢問書籍請說出此書號! 有庫存 NT售價: 340 元 |
出版日:9/1/2017 | |
頁數:326 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787302479772 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第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 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經驗有助于學習本書,但不是必需的。 X hapi.js 實戰
● 第6 章“使用Joi 驗證”教你如何使用具有表現力的強大Joi 庫來鎖定API,對抗 惡意的數據輸入。 ● 第7 章“使用插件構建模塊化應用”展示如何擴展hapi 以及如何把應用拆分成小 的可維護的插件包。 ● 第8 章“充分利用緩存”教你如何利用瀏覽器和服務器端的緩存來增加應用負載。 第III 部分“創建健壯的應用”講述如何確保你的應用是安全的、經過嚴格測試的、 遠離bug 的。 ● 第9 章“身份驗證和安全”研究了驗證用戶身份的多種方式和一些通用的安全漏 洞防范技術。 ● 第10 章“使用Lab、Code 和server.inject() 進行測試”教你書寫簡單強大的測試 去探查應用的每個角落。 ● 第11 章“投入生產環境及更多相關內容”幫助將你的應用投入生產環境,并提供 一些出錯時的建議和技術。 有兩個附錄。附錄A 提供了補充信息,包括下載安裝Node 和npm。附錄B 介紹了版 本號,包含了對本書用到的包的說明。 關于代碼 本書包含了很多源代碼示例,有帶編號的代碼清單,也有行內的普通文本。在兩種例 子中,源代碼用等寬字體格式化以區別于普通文字。有時代碼為粗體,用來高亮顯示特別 重要或與周邊討論有關的代碼。 多數情況下,源代碼被重新格式化了;我們加入了折行和修正的縮進以適應書中可用 的頁面空間。在極少數情況下,這樣還不夠,代碼清單包含了續行符 。此外,當代碼以 文本描述時,源代碼中的注釋通常會從代碼清單中移除。 XI 前 言 作者在線 購買《hapi.js實戰》時,能夠免費訪問由Manning出版社運營的私有論壇,在這里你可以對本書進行評論,提出技術問題,并獲得作者和其他用戶的幫助。 Manning出版社對讀者的承諾是提供一個地點,在這里各位讀者之間,讀者與作者之間可以碰撞出思想的火花。我們不承諾作者現身的次數,他們對該書論壇的貢獻是自愿的(并且是無酬勞的)。我們建議你盡量問他一些具有挑戰性的問題,激發他的興趣。 只要本書還在銷售中,作者在線論壇和前面討論的存檔就會在出版社的網站上開放。 其他在線資源 ● 如果發現任何關于hapi使用方法或整體項目的問題,可在討論區倉庫提交issues。 ● 在Stack Overflow上也有hapi.js的標簽。 作者簡介 Matt Harrison 是一位自由職業的Web開發者和顧問。他是hapi.js的核心貢獻者,高產的博客作者,也是一位活躍的Node.js社區成員。此前,他曾是一名建筑師。他喜歡吃拉面,喝吉尼斯黑啤 |