本書特色:
詳述最新特性,緊跟技術潮流!
本書立足於新的技術潮流,介紹了一系列全新的語言特性與標準,以便讓讀者在學習基礎知識的同時,緊跟嶄新技術的發展。
❑ 從零開始學習開發完整可應用的專案,掌握Node.js基礎細節並獲得實際經驗。
❑ 以實際應用為背景,闡述Node.js在實際專案中的定位與潛在的陷阱。
❑ 適合沒有Node.js經驗的讀者,目標除使讀者能快速上手外,亦能獨立開發出Node.js的小型應用。
-------------------------------------------------------------------------
適用:欲接觸或對Node有興趣的讀者最佳入門書,亦適合相關領域之從業人員與大學、研究所師生作為參考之用。
書附內容
本書範例程式可至佳魁資訊官網下載
作者簡介:
李鍇
畢業於廈門大學軟體學院,目前就職於花旗集團,從事Web前端開發工作。自2014年初接觸Node以來,已使用Node完成許多中小型應用,並期待更多的開發者能夠了解這門效率極佳的語言。
作者序
前言
筆者在2014年初第一次接觸Node,距今已經差不多有4年的時間了。對一種高速發展的語言來說,4年算得上很長的時間了。4年前Node的版本編號還在0.10.x,而時至今日,已經迎來v8.0.0的最新版本了。
Node專案始於2009年,2013年剛好處在當今(2018年)和2009年的中間節點,一種語言在誕生之初的發展總是最快的,到了現在,Node逐漸地變得穩定下來。
但即使這樣,這4年中也發生了不少大事件:Node從分裂又走向了統一,ES2015標準的推出等。
那麼4年後的今天,Node有了哪些改變呢?
一方面,基本的概念幾乎沒有改變,底層的libuv和事件循環還是原來的樣子,主要模組的API也沒什麼大的變化。
另一方面,變動最多的大概是語法了,ECMAScript沉寂數年之後,終於推出了重量級的新版本ES2015,並且計畫每年發佈一個新版本。
換個角度來說,如果現在有一份使用Node最新版本寫的程式,拿給還在使用0.10的開發者看,最大可能是對裡面各種奇怪的關鍵字和語法感到疑惑。這本身就說明了Node發生了如此大的變動。
在筆者看來,Node的發展進入了平台期,這表示在一段時間內,Node將維持現有的模樣,或許會增加或修改一些語法,底層的V8也可能做一些大幅度的改進,但程式的基本結構不會有大的變動。
Node的發展大致分為幾個階段:
❑第一個階段:從誕生到分裂,大致5年的時間。
❑第二個階段:從與io.js合併到ES2015標準正式落地,只有不到半年的時間。
❑第三個階段:從v6.0.0全面支援ES2015至今,Node較大的更新都是圍繞著新的ECMA201x標準展開的。
所有的新與舊都是相對的,雖然在目前來看,本書記述的內容還算是比較新的,無論是ES201x的使用,還是Koa2架構的介紹,都屬於同類書中較少有關的領域,但要是再過幾年的時間,本書的內容也會變得過時。
關於本書內容
本書不是一本ES2015或更新標準的說明書,也不想讓內容停留在介紹各種模組的API羅列上。
第1章 說明Node的執行機制,主要是底層的一些實現和通用的原理,可能需要一些作業系統的知識。
第2章 介紹了通用的模組和使用方法,是真正的入門章節。
第3章 專注於新的ECMAScript標準以及Node對其的支援。
第4章 主要介紹如何更進一步地組織和撰寫非同步程式,採用循序漸進的方式介紹了各種解決方案的優劣之處。
第5章 使用Koa2架構來開發一個Web應用,有關Web開發的各方面,例如路由處理、Session、頁面繪製、資料儲存等。
第6章 介紹了如何使用Node來開發一個爬蟲系統。
第7章 介紹常用的測試方法以及偵錯Node應用的技巧。
第8章 介紹了Node中錯誤處理的相關知識。
附錄A 介紹處理程序、執行緒和程式碼協同的概念,屬於擴充的背景知識。
附錄B Lua語言簡介,Lua幾乎可以認為是某些概念的最佳實現,例如程式碼協同。
附錄C 從零開發了一個玩具式的Web架構,可以認為是對Koa的簡單模仿,對於初學者來說,這應該是一個了解Node Web原理的好方法。
附錄D MongoDB和Redis簡介。
附錄E 使用Docker來實現虛擬化。
附錄F介紹了使用npm來進行套件管理的一些小技巧。
本書的每個章節都是環環相扣的,每一章說明的內容都多多少少地被其他章節使用到,建議讀者循序漸進地閱讀(第1章可以放到最後)。
循序漸進不僅表現在章節安排上,在系統的實現上也是如此,以第6章爬蟲的開發為例,從糟糕的程式設計開始,一步步地進行改進,最後達到比較完整的狀態。
那些糟糕的程式大部分都是在筆者還是初學者時寫的,筆者很慶倖自己還能留著這些程式,它們不僅見證了筆者本人對Node的認識過程,也見證了Node的發展歷史。
關於本書中的程式
所有的原始程式碼都可以在https://github.com/Yuki-Minakami/BookExample上找到,它們都經過了充分的測試。
本書中,除了Node撰寫的範例程式外,還會穿插一些其他語言 (例如Java)的程式,這是為了透過和其他語言的比較讓讀者更進一步地了解Node中的特性。
筆者使用的電腦環境為Mac OSX 10.11,本書中出現的程式絕大多數都是平台無關的,有一些程式在Windows環境下執行會出現問題或不能在Windows下執行,本書也做了對應的標記和提示。讀者在閱讀本書的時候,也建議開啟自己的電腦,第一時間把程式寫在文字編輯器或IDE中。
前言
筆者在2014年初第一次接觸Node,距今已經差不多有4年的時間了。對一種高速發展的語言來說,4年算得上很長的時間了。4年前Node的版本編號還在0.10.x,而時至今日,已經迎來v8.0.0的最新版本了。
Node專案始於2009年,2013年剛好處在當今(2018年)和2009年的中間節點,一種語言在誕生之初的發展總是最快的,到了現在,Node逐漸地變得穩定下來。
但即使這樣,這4年中也發生了不少大事件:Node從分裂又走向了統一,ES2015標準的推出等。
那麼4年後的今天,Node有了哪些改變呢?
一方面,基本的概念幾乎沒有改變,底層的libuv和事件...
目錄
第1章 基礎知識
1.1 Node是什麼
1.2 Node的內部機制
1.3 事件循環(Event loop)
1.4 歸納
1.5 參考資源
第2章 常用模組
2.1 Module
2.2 Buffer
2.3 File System
2.4 HTTP服務
2.5 TCP服務
2.6 更安全的傳輸方式——SSL
2.7 WebSocket
2.8 Stream
2.9 Events
2.10 多處理程序服務
2.11 Process物件
2.12 Timer
2.13 小結
2.14 參考資源
第3章 用ES6來撰寫Node
3.1 新時代的EMCAScript
3.2 區塊級作用域
3.3 陣列
3.4 函數
3.5 Set和Map
3.6 Iterator
3.7 物件
3.8 類別
3.9 類別的繼承
3.10 ES6的模組化標準
3.11 使用babel來轉換程式
3.12 小結
3.13 參考資源
第4章 撰寫非同步程式
4.1 非同步作業的傳回值
4.2 組織回呼方法
4.3 使用Promise
4.4 Generator,一種過渡方案
4.5 回呼的終點——async/await
4.6 歸納
4.7 參考資源
第5章 使用Koa2建置Web網站
5.1 Node Web架構的發展歷程
5.2 內容規劃
5.3 Koa入門
5.4 middleware
5.5 常用服務的實現
5.6 建置穩固的Web應用
5.7 使用Redis進行持久化
5.8 Koa原始程式剖析
5.9 網站部署
5.10 歸納
5.11 參考資源
第6章 爬蟲系統的開發
6.1 爬蟲技術概述
6.2 技術堆疊簡介
6.3 建置腳手架
6.4 進行批次爬取
6.5 爬蟲架構的改進
6.6 處理程序架構的改進
6.7 反爬蟲處理
6.8 歸納
6.9 參考資源
第7章 測試與偵錯
7.1 單元測試
7.2 測試現有程式
7.3 更高維度的測試
7.4 偵錯Node應用
7.5 歸納
7.6 參考資源
第8章 Node中的錯誤處理
8.1 Error模組
8.2 錯誤處理的幾種方式
8.3 被拋棄的Domain
8.4 ES6中的錯誤處理
8.5 Web服務中的錯誤處理
8.6 防禦式程式設計與Let it crash
8.7 歸納
8.8 參考資源
附錄A 處理程序、執行緒、程式碼協同
附錄B Lua語言簡介
附錄C 從零開發一個Node Web架構
附錄D MongoDB和Redis簡介
附錄E 使用Docker來實現虛擬化
附錄F npm與套件管理
第1章 基礎知識
1.1 Node是什麼
1.2 Node的內部機制
1.3 事件循環(Event loop)
1.4 歸納
1.5 參考資源
第2章 常用模組
2.1 Module
2.2 Buffer
2.3 File System
2.4 HTTP服務
2.5 TCP服務
2.6 更安全的傳輸方式——SSL
2.7 WebSocket
2.8 Stream
2.9 Events
2.10 多處理程序服務
2.11 Process物件
2.12 Timer
2.13 小結
2.14 參考資源
第3章 用ES6來撰寫Node
3.1 新時代的EMCAScript
3.2 區塊級作用域
3.3 陣列
3.4 函數
3.5 Set和Map
3.6 Iterator
3.7 物件
3.8 類別
...