Node.js是一套用來編寫高性能網(wǎng)絡(luò)服務(wù)器的JavaScript工具包。它可以讓JavaScript在服務(wù)器端運(yùn)行,因此,它可用來快速構(gòu)建網(wǎng)絡(luò)服務(wù)及應(yīng)用的平臺。 本書是學(xué)習(xí)Node編程的入門指南。全書共12章,由淺入深。本書首先介紹Node的基礎(chǔ)知識、Node的核心功能、Node的模塊系統(tǒng)和REPL等,然后講解Node的Web應(yīng)用、流和管道、Node對文件系統(tǒng)的支持、網(wǎng)絡(luò)和套接字、子進(jìn)程、ES6等相關(guān)知識,*后介紹了全棧Node編程、Node的開發(fā)環(huán)境和產(chǎn)品環(huán)境以及Node的新應(yīng)用。 本書適合有一定基礎(chǔ)的JavaScript程序員閱讀,也適合對學(xué)習(xí)Node應(yīng)用開發(fā)感興趣的讀者學(xué)習(xí)參考。
·作者為資深Web開發(fā)工作者,將自己多年的實(shí)戰(zhàn)經(jīng)驗(yàn)與讀者分享,閱讀完本書,讀者可以通過Node將Web開發(fā)技術(shù)從瀏覽器擴(kuò)展到服務(wù)端,并且學(xué)習(xí)如何在基于JavaScript的平臺上實(shí)現(xiàn)快速和高度可擴(kuò)展的網(wǎng)絡(luò)應(yīng)用。 ·本書針對Node長期支持版本(LTS)和Node6.0版本進(jìn)行了更新。通過本書,讀者可以掌握Node的核心技能并了解如何使用內(nèi)建和第三方模塊。 ·此外,本書還講解了Node的事件驅(qū)動異步I/O模型。它可以幫助讀者搭建出提供高并發(fā)訪問而不涉及大量計(jì)算的數(shù)據(jù)密集型應(yīng)用。如果讀者對JavaScript比較感興趣,可以通過本書提供的代碼和部署示例在服務(wù)端使用Node進(jìn)行開發(fā)。
Shelley Powers一直從事Web技術(shù)相關(guān)的工作,并為此著書。她的著作的內(nèi)容涉及很多方面,從JavaScript的第一個版本到最新的圖像和設(shè)計(jì)工具。她最近出版的圖書涵蓋語義網(wǎng)、Ajax、JavaScript和網(wǎng)絡(luò)圖像等內(nèi)容。
第 1章 Node運(yùn)行環(huán)境 1
1.1 安裝Node 1
1.2 使用Node編寫Hello, World 3
1.2.1 一個基本的Hello World程序 3
1.2.2 升級版Hello World 6
1.2.3 Node命令行參數(shù) 9
1.3 Node部署環(huán)境 10
1.3.1 將Node部署在你的服務(wù)器、VPS或者托管主機(jī)上 10
1.3.2 云部署 10
1.4 Node長期支持和Node升級 11
1.4.1 Node的最新語義化版本規(guī)范 12
1.4.2 Node版本更新 13
1.5 Node、V8和ES6 14
1.6 高級內(nèi)容:Node的C/C 插件 15
第 2章 Node基礎(chǔ):全局對象、事件和Node自身的異步特性 18
2.1 global和process對象 19
2.1.1 global對象 19
2.1.2 process對象 20
2.2 緩沖器(buffer)、類型化數(shù)組和字符串 24
2.2.1 緩沖器、JSON、StringDecoder和UTF-8字符串 26
2.2.2 緩沖器操作 28
2.3 Node的回調(diào)函數(shù)和異步事件處理 31
2.3.1 事件隊(duì)列(循環(huán)) 31
2.3.2 創(chuàng)建一個異步回調(diào)函數(shù) 35
2.3.3 EventEmitter 37
2.3.4 Node事件循環(huán)和定時(shí)器 41
2.4 嵌套回調(diào)和異常處理 44
第3章 Node模塊和Node包管理器(npm)基礎(chǔ) 52
3.1 Node模塊系統(tǒng)概覽 52
3.1.1 Node如何查找并加載一個模塊 53
3.1.2 沙箱和虛擬機(jī)模塊 56
3.2 NPM的深度挖掘 60
3.3 創(chuàng)建和發(fā)布你自己的Node模塊 65
3.3.1 創(chuàng)建一個模塊 65
3.3.2 將整個目錄打包 66
3.3.3 準(zhǔn)備發(fā)布一個模塊 67
3.3.4 發(fā)布模塊 70
3.4 探索Node模塊以及3個必要模塊 71
3.4.1 使用Async來更好地管理回調(diào)函數(shù) 73
3.4.2 使用Commander玩轉(zhuǎn)命令行 78
3.4.3 無所不在的Underscore 80
第4章 交互式Node和REPL,以及控制臺的深入研究 82
4.1 REPL的初體驗(yàn)和undefined表達(dá)式 82
4.2 REPL的好處:深入理解JavaScript引擎 84
4.3 更復(fù)雜的多行JavaScript 85
4.3.1 REPL命令 89
4.3.2 REPL和rlwrap 89
4.3.3 自定義REPL 91
4.4 世事無常經(jīng)常保存 94
4.5 控制臺的必要性 95
4.5.1 控制臺消息類型、Console類以及阻塞 95
4.5.2 使用util.format()和util.inspect()來格式化消息 97
4.5.3 用控制臺和定時(shí)器提供更豐富的反饋 101
第5章 Node和Web 102
5.1 HTTP模塊:服務(wù)器(server)和客戶端(client) 102
5.2 創(chuàng)建一個靜態(tài)網(wǎng)站服務(wù)器都需要什么 107
5.3 使用Apache來代理Node服務(wù)器 115
5.4 使用Query String來解析參數(shù) 117
5.5 DNS解析 118
第6章 Node和本地系統(tǒng) 120
6.1 探索操作系統(tǒng) 120
6.2 流(Stream)和管道(Pipe) 122
6.3 文件系統(tǒng)的正式介紹 123
6.3.1 fs.Stats類 124
6.3.2 文件系統(tǒng)監(jiān)聽器 126
6.3.3 文件讀取和寫入 127
6.3.4 目錄的訪問和維護(hù) 128
6.3.5 文件流 129
6.4 通過路徑訪問資源 131
6.5 創(chuàng)建一個命名行工具 133
6.6 使用ZLib進(jìn)行壓縮/解壓縮 135
6.7 管道和ReadLine模塊 138
第7章 網(wǎng)絡(luò)、套接字和安全 141
7.1 服務(wù)器、流和套接字 141
7.1.1 套接字和流 141
7.1.2 TCP套接字和服務(wù)器 142
7.1.3 UDP/數(shù)據(jù)報(bào)套接字 147
7.2 守門人 148
7.2.1 安裝TLS/SSL 149
7.2.2 使用HTTPS 150
7.2.3 Crypto模塊 152
第8章 子進(jìn)程 157
8.1 child_process.spawn 157
8.1.1 child_process.exec和child_process.execFile 161
8.1.2 child_process.fork 163
8.2 在Windows中運(yùn)行一個子進(jìn)程程序 164
第9章 Node和ES6 167
9.1 嚴(yán)格模式 167
9.2 let和const 169
9.3 箭頭函數(shù) 171
9.4 類 173
9.5 使用Bluebird來實(shí)現(xiàn)promise 175
第 10章 全棧Node開發(fā) 179
10.1 Express應(yīng)用框架 179
10.2 MongoDB和Redis數(shù)據(jù)庫系統(tǒng) 185
10.2.1 MongoDB 186
10.2.2 Redis中的key/value存儲 189
10.3 AngularJS和其他全?蚣堋196
第 11章 Node開發(fā)環(huán)境和產(chǎn)品環(huán)境 202
11.1 調(diào)試Node程序 202
11.1.1 Node調(diào)試器 202
11.1.2 Node檢查器 207
11.2 單元測試 210
11.2.1 使用Assert進(jìn)行單元測試 210
11.2.2 用Nodeunit寫單元測試 213
11.2.3 其他的測試框架 215
11.3 保持Node進(jìn)程的運(yùn)行 218
11.4 使用Apache Bench進(jìn)行基準(zhǔn)測試和負(fù)載測試 221
第 12章 新環(huán)境中的Node 224
12.1 三星的IoT和GPIO 224
12.2 Windows與Chakra Node 226
12.3 微控制器和微型計(jì)算機(jī)中的Node 227
12.3.1 Fritzing 228
12.3.2 Node和Arduino 232
12.3.3 Node和樹莓派2 238