産品特色
   
     編輯推薦
      《Node.js實戰(第2季)》作者來自CNode社區點擊率頗高、粉絲數萬的《一起學node.js》。《Node.js實戰(第2季)》沒有成為教條式的入門級彆,而是真正進入Node.js實戰層次。
  《Node.js實戰(第2季)》在《Node.js實戰(雙色)》的基礎上增加瞭實戰案例的難度,並結閤瞭當下的熱門應用,增加瞭對原理、代碼的細節講解。
  《Node.js實戰(第2季)》與《Node.js實戰(雙色)》配套學習,可迅速開闊視野、提升開發技能、增加實戰實力。
  《Node.js實戰(第2季)》是經讀者強烈呼籲而誕生的,作者絞盡腦汁,就是為瞭讓讀者在閱讀後大呼過癮!
      內容簡介
     《Node.js實戰(第2季)》通過7個實例分彆講解瞭Node.js在實戰開發中的應用,這些章節既涉及Docker、Koa 等全新技術,也涉及OAuth2、命令行工具、消息隊列、單元測試、編寫C/C++模塊等實戰中經常會遇到的問題和應用場景。本書章節大體按照從簡單到復雜的難度編排,每一章都通過一個實例指引讀者從頭開發一個Node.js應用,讓讀者循序漸進地學習Node.js,以及在實戰開發中的編程技巧。本書不但著重講解瞭每個實戰案例所涉及的基礎知識、思路和方法,也詳細解釋瞭源碼的關鍵部分,希望有利於讀者的學習和理解。 
  《Node.js實戰(第2季)》適閤有一定Node.js基礎及服務器端開發基礎的讀者閱讀,也適閤想瞭解Node.js可以做什麼、想迅速上手實踐的讀者閱讀。     
作者簡介
     吳中驊,現於同程旅遊擔任係統架構師,也負責在同程旅遊開展Node.js項目,非常享受Node.js的高性能和異步帶來的編程愉悅感。
  雷宗民,一登後颱開發工程師,2011年6月開始接觸Node.js,從此開始各種摺騰與造輪子。
  趙坤,現於北京紅樹島信息科技有限公司工作,熱愛互聯網,崇尚開源精神。2013年偶遇Node.js,相見恨晚,從此開始一條Node.js不歸路。
  劉亞中,GitHub發燒友、Node.js源碼貢獻者,以Node.js Ninja身份先後參與國內外多個創業項目如Pixbi、Fireball、WeFlex、51Degrees等,並參與維護其中的部分開源項目。
     目錄
   第1章 通過Docker快速發布Node.js應用/ 1 
1.1 什麼是Docker /1 
1.2 Nginx作為Node.js前端Web Server的作用 /3 
1.3 安裝Docker和下載Images鏡像/ 5 
1.4 Docker常用命令 /8 
1.5 啓動Container盒子 /10 
1.6 文件捲標加載/ 11 
1.7 將多個Container盒子連接起來 /13 
1.8 不要用SSH連接到你的Container盒子 /15 
1.9 配置DockerImages鏡像和發布應用/ 19 
1.10 什麼是Jenkins/ 26 
1.11 通過Docker安裝和啓動Jenkins /28 
1.12 配置Jenkins並自動化部署Node.js項目/ 29 
1.13 小結/ 36 
1.14 參考文獻/ 37 
第2章 開發OAuth2認證服務器 /38 
2.1 本章所用到的第三方模塊/ 38 
2.2 REST風格的API/ 39 
2.3 定義返迴數據格式/ 40 
2.4 實現簡單的API/ 41 
2.4.1 擴展Response對象/ 41 
2.4.2 統一處理齣錯信息/ 43 
2.4.3 實現簡單的API/ 43 
2.4.4 API版本/ 44 
2.5 關於OAuth認證/ 45 
2.5.1 OAuth 2.0授權流程/ 45 
2.5.2 OAuth 2.0授權詳解/ 45 
2.5.3 定義授權接口/ 48 
2.6 實現OAuth認證/ 48 
2.6.1 OAuth2/authorize接口/ 48 
2.6.2 OAuth2/access_token接口/ 52 
2.6.3 在處理API請求前驗證Access Token/ 55 
2.6.4 Access Token過期的問題/ 56 
2.7 實現API客戶端/ 58 
2.8 API傳輸過程中的安全問題/ 62 
2.9 API請求頻率限製/ 63 
2.10 讓API返迴結果支持不同的格式/65 
2.10.1 通過後綴來指定返迴的數據格式/ 65 
2.10.2 通過Accept請求頭來指定返迴的數據格式/ 67 
2.11 生成隨機的測試數據/ 68 
2.12 小結/ 69 
2.13 參考文獻及開源項目/ 70 
第3章 基於RabbitMQ搭建消息隊列/ 72 
3.1 什麼是消息隊列,消息隊列的優勢/72 
3.2 安裝和啓動RabbitMQ /75 
3.3 RabbitMQ的Hello World/ 76 
3.4 RabbitMQ的工作隊列/80 
3.5 RabbitMQ的PUB/SUB隊列/ 84 
3.6 RabbitMQ的隊列路由 /89 
3.7 RabbitMQ的RPC遠程過程調用/ 94 
3.8 基於RabbitMQ的Node.js和Python通信實例/ 99 
3.9 RabbitMQ方案和HTTP方案的對比 /103 
3.10 小結/ 117 
3.11 參考文獻 117 
第4章 編寫命令行工具——打造一個靜態博客係統/ 118 
4.1 本章所使用到的第三方模塊/ 119 
4.2 命令格式/ 120 
4.2.1 常見的命令格式/ 121 
4.2.2 定義靜態博客命令格式/121 
4.3 編寫命令行工具/ 122 
4.4 實時預覽/ 126 
4.4.1 啓動Web服務器 /127 
4.4.2 渲染文章頁麵/ 128 
4.4.3 文章元數據/ 131 
4.4.4 增加模闆/ 132 
4.4.5 渲染文章列錶/ 136 
4.5 生成靜態博客/ 140 
4.6 配置文件/ 146 
4.7 創建空白博客模闆/ 150 
4.8 一些有用的第三方服務/ 153 
4.8.1 評論組件/ 153 
4.8.2 分享組件/ 154 
4.9 小結/ 155 
4.10 參考文獻/ 156 
第5章 基於Koa快速開發Web應用/ 157 
5.1 ES6時代的來臨/ 157 
5.1.1 function和function*/ 158 
5.1.2 yield和yield*/ 1605.1.3 co和Koa/ 162 
5.2 模闆係統/ 170 
5.2.1 ejs和co-ejs/ 170 
5.2.2 過濾器/ 173 
5.3 路由/ 173 
5.4 參數驗證與錯誤處理/ 175 
5.4.1 koa-scheme /175 
5.4.2 koa-errorhandler/ 178 
5.5 緩存和配置/ 182 
5.5.1 koa-router-cache和co-cache /182 
5.5.2 config-lite/ 184 
5.6 測試/ 184 
5.6.1 單元測試/ 184 
5.6.2 co-mocha和co-supertest 185 
5.7 開發一個論壇係統/ 189 
5.7.1 基礎項目搭建/ 189 
5.7.2 路由和功能設計/ 193 
5.7.3 自定義模型/ 194 
5.7.4 theme的設計/ 200 
5.7.5 注冊/ 206 
5.7.6 登錄與登齣/ 213 
5.7.7 主頁與版塊/ 216 
5.7.8 用戶頁/ 221 
5.7.9 發錶頁與話題頁/ 222 
5.7.10 測試/ 228 
5.7.11 部署 231 
5.8 小結/ 233 
5.9 參考文獻/ 233 
第6章 Node.js測試服務搭建 /235 
6.1 概述/ 235 
6.1.1 目的/ 2356.1.2 Pixbi/ 236 
6.2 搭建後端測試服務/ 238 
6.2.1 單元測試/ 239 
6.2.2 功能性測試/ 259 
6.2.3 可拓展性測試/ 260 
6.3 搭建前端測試服務/ 261 
6.3.1 PhantomJS/ 262 
6.3.2 BrowserStack/ 266 
6.3.3 Adobe CEP(Common Extensibility Platform)/269 
6.4 加入持續集成工作流/ 271 
6.5 小結/ 274 
6.6 參考資料/ 276 
第7章 使用Node.js綁定C語言庫——51Degrees.node /277 
7.1 開發背景/ 277 
7.2 預備知識/ 279 
7.2.1 51Degrees-C /279 
7.2.2 C/C++中的Node.js API/ 282 
7.2.3 使用nan/ 284 
7.3 編碼/ 285 
7.3.1 項目初始化/ 285 
7.3.2 創建v8膠水層接口/ 286 
7.3.3 創建JavaScript代碼/ 293 
7.4 構建與發布/ 294 
7.4.1 node-gyp與binding.gyp/ 294 
7.4.2 發布/ 296 
7.5 如何從nan 1.x升級到nan 2.x /296 
7.6 後記/ 298       
前言/序言
     自本書第1季《Node.js實戰(雙色)》齣版以來,JavaScript界又發生瞭許多重大事件:React.js和AngularJS 2.0相繼齣現;ES6於2015年年中正式定稿;io.js從Node.js社區中分裂齣來,後又與其閤並。截至本書齣版時,npm上有接近18萬的模塊,是去年同期的3倍,周下載量接近5.6億次,是2014年同期的10倍。越來越多的創業公司和大公司都不同程度地使用瞭Node.js, Node.js已經成為一門成熟、穩定且具有獨特魅力的技術。 
  延續《Node.js實戰(雙色)》的寫作思路,本書不會從頭講解Node.js是什麼,而是麵嚮有一定Node.js基礎的讀者,建議讀者把本書當作入門與進階之間的過渡書籍來閱讀。本書通過7個實例來講解Node.js在不同場景下的應用,通過閱讀本書,讀者可以快速熟悉並使用Node.js進行開發。本書由4位作者共同編寫,其中吳中驊完成瞭第1、3章的創作,雷宗民完成瞭第2、4章的創作,趙坤完成瞭第5章的創作,劉亞中完成瞭第6、7章的創作。 
  第1章主要介紹瞭如何使用Docker快速發布一個Nginx+Express+Redis項目,然後使用Jenkins進行簡單的持續集成發布工作,其中介紹瞭Docker的基礎概念、用法和Jenkins的安裝配置方法。 
  第2章介紹瞭當前比較流行的OAuth2認證。OAuth2認證是當API服務器對外提供服務時,驗證API使用者權限的有效的認證方式。本章主要介紹瞭使用Node.js搭建一個基本的API服務器所涉及的組件、方法和技術細節。 
  第3章主要介紹瞭如何在Node.js中使用消息隊列軟件RabbitMQ來解決Web服務器或應用服務器間的通信問題。對於服務器間的跨語言通信,以前一般采用XMLRPC方式,而現在比較流行采用HTTP的RESTful方式,使用RabbitMQ能夠很靈活地處理這些事情。 
  第4章以一個靜態博客係統構建工具作為實例,介紹如何使用Node.js的commander模塊來編寫一個命令行工具。 
  第5章介紹瞭ES6中生成器、yield,以及Node.js下一代Web開發框架Koa及其中間件的用法,最後通過搭建一個簡單的論壇係統,讓讀者從實踐中學習如何基於Koa快速開發Web應用。 
  第6章分享瞭作者在一傢時尚雜誌相關的互聯網創業團隊工作的部分經曆:為該團隊搭建一套較基礎的Node.js測試服務,測試範圍涵蓋服務器、瀏覽器、Mag+、Adobe InDesign等平颱。希望讀者通過這個分享能夠找到一種更為全麵的方式去保證項目代碼的質量。 
  第7章分享瞭作者與51Degrees團隊遠程工作的細節,可以讓讀者大緻瞭解如何將一個已有的C/C++代碼庫拓展到Node.js平颱上進行使用。 
  感謝電子工業齣版社博文視點張國霞編輯的熱心幫助和指導;感謝神豬、河蟹、AKI、何翊宇(dead_horse)、Kenneth Kan、Baptiste Gaillard、Jorn Zaefferer和Fish對本書的校驗;再次感謝何翊宇為本書慷慨作序。 
  如果您對本書有任何評論或建議,可加入本書官方QQ群(156627943)進行討論,或者到讀者反饋網站http://nodejs.ucdok.com進行反饋,真誠歡迎您的意見與反饋。     
				
 
				
				
					Node.js 實戰(第 2 季):精進你的服務器端 JavaScript 技能  在飛速發展的 Web 開發領域,Node.js 已成為不可或缺的強大工具。它憑藉其獨特的非阻塞、事件驅動的 I/O 模型,為構建高性能、可伸縮的後端應用程序提供瞭前所未有的機遇。如果您已經掌握瞭 Node.js 的基礎知識,並渴望深入挖掘其更高級的特性和最佳實踐,那麼《Node.js 實戰(第 2 季)》將是您不可錯過的進階之選。本書並非 Node.js 的入門教程,而是建立在您已有一定 Node.js 基礎之上,旨在幫助您成為一名更熟練、更高效的 Node.js 開發者。  本書核心價值:從“能用”到“精通”,賦能復雜場景下的 Node.js 開發  《Node.js 實戰(第 2 季)》將帶領您走齣 Node.js 的舒適區,探索那些能夠顯著提升應用性能、可維護性和穩定性的核心概念和技術。我們不僅僅介紹 API,更注重理解其背後的原理,讓您能夠根據實際業務需求,做齣更明智的技術決策。本書將聚焦於以下幾個關鍵領域:  一、 深入理解 Node.js 核心機製:構建堅實的技術基石     深入 V8 引擎: Node.js 的強大離不開 V8 JavaScript 引擎。本書將帶您領略 V8 的內部工作原理,包括其垃圾迴收機製、事件循環的精妙之處,以及如何通過理解這些底層機製來優化您的代碼性能。您將瞭解 JavaScript 代碼如何在 V8 中被編譯、執行,以及內存管理是如何工作的,從而避免常見的性能陷阱。    事件循環與非阻塞 I/O 的精髓: 盡管您可能已經在使用 Node.js,但對事件循環的深刻理解是成為高級開發者的關鍵。本書將詳細解析事件循環的各個階段(timers, I/O callbacks, check, close callbacks),以及 libuv 在其背後的作用。您將學習如何利用這些知識來編寫真正高效、響應迅速的應用程序,並理解為什麼 Node.js 在 I/O 密集型任務中錶現齣色。    模塊係統與加載機製: Node.js 的模塊化設計是其靈活性的重要體現。本書將深入探討 CommonJS 和 ES Modules 在 Node.js 中的支持和應用,以及它們之間的兼容性問題。您將學習如何構建清晰、可維護的代碼結構,以及如何有效地管理依賴,避免潛在的衝突。    異步編程的藝術: 迴調函數、Promise、async/await,異步編程是 Node.js 的靈魂。本書將為您梳理異步編程的演進曆程,並深入講解 Promises 和 async/await 的高級用法,包括錯誤處理策略、並行與串行執行的權衡,以及如何構建更易於理解和維護的異步代碼流。您將學會如何優雅地處理復雜的異步操作,而不會陷入“迴調地獄”。  二、 構建健壯、可伸縮的後端服務:應對生産環境的挑戰     高性能 Web 服務器開發: 從零開始構建一個高效的 Web 服務器是本書的重要實踐環節。您將學習如何利用 Node.js 的內置 `http` 模塊,結閤 Express.js 等框架,構建具有路由、中間件、請求/響應處理能力的 Web 應用。本書將深入講解路由策略、中間件設計模式,以及如何實現 RESTful API。    API 設計與最佳實踐: 設計良好的 API 是構建可維護、可擴展係統的基石。本書將探討 RESTful API 的設計原則,包括資源命名、HTTP 方法的使用、狀態碼的正確運用,以及版本控製策略。您將學習如何設計齣既易於使用又易於擴展的 API 接口。    數據庫集成與優化: 現代 Web 應用離不開數據庫。本書將重點介紹如何高效地與主流數據庫(如 PostgreSQL, MongoDB)進行集成。您將學習如何使用 ORM/ODM 庫(如 Sequelize, Mongoose)來簡化數據庫操作,並深入探討數據庫連接池、查詢優化、索引策略等關鍵技術,以確保數據庫訪問的性能和穩定性。    身份驗證與授權: 安全是任何後端服務的生命綫。本書將詳盡講解 JWT (JSON Web Tokens) 的原理與實現,以及如何構建安全的身份驗證和授權機製。您將學習如何保護您的 API 免受未經授權的訪問,並實現基於角色的訪問控製。    錯誤處理與日誌記錄: 健壯的應用離不開完善的錯誤處理和日誌記錄機製。本書將指導您如何設計統一的錯誤處理策略,以及如何利用日誌記錄工具(如 Winston, Pino)來捕獲、分析和診斷生産環境中的問題,從而快速定位和解決故障。  三、 提升應用性能與穩定性:應對高並發與復雜負載     性能調優與瓶頸分析: 瞭解如何識彆和解決性能瓶頸至關重要。本書將介紹各種性能分析工具(如 Node.js 的內置 profiler, Chrome DevTools),以及如何運用它們來定位 CPU 密集型或 I/O 密集型代碼,並提供針對性的優化建議。    進程管理與集群: Node.js 的單進程模型在處理 CPU 密集型任務時可能成為瓶頸。本書將深入講解 Node.js 的 `cluster` 模塊,教您如何利用多核 CPU 來提升應用的吞吐量。您將學習如何管理多個 Node.js 進程,以及如何實現負載均衡。    緩存策略與實現: 緩存是提升應用性能的利器。本書將介紹內存緩存(如 Redis, Memcached)的應用場景和實現方法,以及如何設計有效的緩存策略,以減少數據庫壓力,加速響應時間。    消息隊列與異步通信: 在分布式係統中,消息隊列扮演著至關重要的角色。本書將介紹 RabbitMQ, Kafka 等消息隊列的工作原理,以及如何將它們集成到 Node.js 應用中,實現異步通信、解耦服務,提高係統的彈性和可伸縮性。    高可用性與容錯設計: 構建高可用的服務是生産環境部署的關鍵。本書將探討熔斷、降級、重試等容錯機製,以及如何利用這些技術來提高應用的魯棒性,確保在麵對部分服務故障時,係統仍能保持運行。  四、 現代化 Node.js 開發實踐:擁抱前沿技術趨勢     TypeScript 的應用: 隨著項目規模的增長,靜態類型檢查成為提高代碼質量和可維護性的有效手段。本書將深入講解如何在 Node.js 項目中集成和使用 TypeScript,包括類型定義、接口、泛型等,幫助您構建更健壯、更易於協作的代碼。    容器化與部署: Docker 已成為現代應用部署的標準。本書將指導您如何將 Node.js 應用打包成 Docker 鏡像,以及如何在 Docker 容器中運行和管理您的應用。您還將初步瞭解 Kubernetes 等容器編排技術,為後續的雲原生部署打下基礎。    測試驅動開發(TDD)與單元測試: 編寫高質量的測試是保證代碼質量的有效方式。本書將介紹 Jest, Mocha 等主流測試框架,以及如何編寫單元測試、集成測試,並講解測試驅動開發的流程,幫助您構建信心十足的代碼。    DevOps 與 CI/CD: 自動化是現代軟件開發的趨勢。本書將初步探討 DevOps 的理念,以及如何結閤 CI/CD 管道(如 Jenkins, GitHub Actions)來實現代碼的持續集成與持續部署,從而提高開發效率和交付速度。  本書適閤讀者     已經掌握 Node.js 基礎語法和常用模塊,並希望深入理解其底層原理的開發者。    負責構建高性能、可伸縮後端服務的團隊成員。    希望提升 Node.js 應用的安全性、穩定性和可維護性的開發者。    對 TypeScript、Docker、消息隊列等前沿技術感興趣,並希望將其應用於 Node.js 開發的開發者。    有誌於成為一名優秀的 Node.js 架構師或技術專傢的開發者。  《Node.js 實戰(第 2 季)》不僅僅是一本書,更是一份通往 Node.js 精通之路的路綫圖。它將幫助您剋服挑戰,掌握更高級的技術,構建更齣色的 Web 應用。無論您是初露鋒芒的新手,還是經驗豐富的開發者,本書都將為您提供寶貴的知識和實用的技能,助您在 Node.js 的開發領域更上一層樓。讓我們一起踏上這場精彩的 Node.js 實戰之旅吧!