新時期的Node.js入門
作者:李鍇
定價:49元
印次:1-1
ISBN:9787302487807
出版日期:2018.01.01
印刷日期:2017.12.11
Node.js是一門開源的、為Web而生的語言,具有高並發、異步等特點,並且擁有一個十分活躍的開發者社區。與Ruby、Python等語言相比,Node.js更年輕、更易於沒有經驗的人上手使用,因此很快在世界各地的開發者中收穫了一大批擁躉。在國內,Node.js在許多企業中獲得了廣泛套用,並取得了一系列的套用成果。然而,隨著技術的不斷更新、ECMAScript2015等新標準紛紛確定,現有的中文書籍就變得有些過時。
目錄
目錄
第1章基礎知識 1
1.1Node是什麼 1
1.1.1Node與JavaScript 1
1.1.2runtime和VM 2
1.2Node的內部機制 3
1.2.1何為回調 3
1.2.2同步/異步和阻塞/非阻塞 4
1.2.3單執行緒和多執行緒 6
1.2.4並行和並發 7
1.3事件循環(Eventloop) 8
1.3.1事件與循環 8
1.3.2Node中的事件循環 9
1.3.3process.nextTick 13
1.4總結 16
1.5參考資源 16
第2章常用模組 17
2.1Module 17
2.1.1JavaScript的模組規範 17
2.1.2require及其運行機制 18
2.1.3require的隱患 20
2.1.4模組化與作用域 20
2.2Buffer 22
2.2.1Buffer的構建與轉換 23
2.2.2Buffer的拼接 24
2.3FileSystem 26
2.4HTTP服務 30
2.4.1創建HTTP伺服器 30
2.4.2處理HTTP請求 32
2.4.3Response對象 34
2.4.4上傳數據 35
2.4.5HTTP客戶端服務 38
2.4.6創建代理伺服器 39
2.5TCP服務 40
2.5.1TCP和Socket 41
2.5.2創建TCP伺服器 41
2.6更安全的傳輸方式——SSL 42
2.6.1什麼是SSL 43
2.6.2SSL原理 43
2.6.3對稱加密與非對稱加密 44
2.6.4關於CA 45
2.6.5創建HTTPS服務 45
2.7WebSocket 48
2.7.1保持通話 48
2.7.2為什麼要有WebSocket 49
2.7.3WebSocket與Node 50
2.8Stream 50
2.8.1Stream的種類 50
2.8.2ReadLine 53
2.8.3自定義Stream 54
2.9Events 55
2.9.1事件和監聽器 55
2.9.2處理error事件 56
2.9.3繼承Events模組 57
2.10多進程服務 58
2.10.1child_process模組 58
2.10.2spawn 58
2.10.3fork 59
2.10.4exec和execFile 60
2.10.5各方法之間的比較 62
2.10.6進程間通信 64
2.10.7Cluster 65
2.11Process對象 66
2.11.1環境變數 67
2.11.2方法和事件 67
2.11.3一個例子:修改所在的時區 68
2.12Timer 70
2.12.1常用API 70
2.12.2定時器中的this 71
2.13小結 72
2.14引用資源 72
第3章用ES6來書寫Node 73
3.1新時代的EMCAScript 73
3.1.1JavaScript的缺陷 73
3.1.2Node對新標準的支持 74
3.1.3使用nvm管理Node版本 75
3.2塊級作用域 75
3.2.1ES5中的作用域 75
3.2.2let關鍵字 77
3.2.3const關鍵字 78
3.3數組 78
3.3.1find()和findIndex() 79
3.3.2from()方法 79
3.3.3fill()方法 81
3.3.4數組的遍歷 81
3.3.5TypedArray 82
3.4函式 82
3.4.1參數的默認值 82
3.4.2Spread運算符 83
3.4.3箭頭函式 83
3.4.4箭頭函式的陷阱 86
3.5Set和Map 87
3.5.1Set和WeakSet 87
3.5.2Map和WeakMap 88
3.6Iterator 89
3.6.1Java中的Iterator 89
3.6.2ES6中的Iterator 89
3.6.3Iterator的遍歷 90
3.7對象 91
3.7.1新的方法 91
3.7.2對象的遍歷 92
3.8類 93
3.8.1屬性和構造函式 94
3.8.2類方法 94
3.8.3__proto__ 95
3.8.4靜態方法 96
3.9類的繼承 96
3.9.1ES5中的繼承 96
3.9.2ES6中的繼承 98
3.9.3Node中的類繼承 100
3.10ES6的模組化標準 101
3.11使用babel來轉換代碼 102
3.12小結 106
3.13引用資源 106
第4章書寫異步代碼 107
4.1異步操作的返回值 108
4.2組織回調方法 108
4.2.1回調與CPS 108
4.2.2使用async模組簡化回調 110
4.3使用Promise 112
4.3.1Promise的歷史 112
4.3.2Promise是什麼 113
4.3.3ES2015中的Promise 114
4.3.4Promise的常用API 116
4.3.5使用Promise組織異步代碼 119
4.3.6第三方模組的Promise 120
4.4Generator,一種過渡方案 122
4.4.1Generator的使用 122
4.4.2Generator函式的執行 123
4.4.3Generator中的錯誤處理 126
4.4.4用Generator組織異步方法 127
4.4.5Generator的自動執行 128
4.5回調的終點——async/await 131
4.5.1async函式的概念 131
4.5.2await關鍵字 133
4.5.3在循環中使用async方法 135
4.5.4async和await小結 136
4.5.5async函式的缺點 137
4.6總結 138
4.7引用資源 139
第5章使用Koa2構建Web站點 140
5.1NodeWeb框架的發展歷程 140
5.1.1Connect 140
5.1.2Express 141
5.1.3Koa 141
5.2內容規劃 142
5.2.1需求分析 142
5.2.2技術選型 142
5.3Koa入門 143
5.3.1Koa1.x與Koa2 143
5.3.2context對象 144
5.4middleware 148
5.4.1中間件的概念 148
5.4.2next方法 150
5.4.3中間件的串列調用 151
5.4.4一個例子——如何實現逾時回響 152
5.5常用服務的實現 154
5.5.1靜態檔案服務 154
5.5.2路由服務 155
5.5.3數據存儲 156
5.5.4檔案上傳 160
5.5.5頁面渲染 163
5.6構建健壯的Web套用 165
5.6.1上傳檔案驗證 166
5.6.2使用Cookie進行身份驗證 167
5.6.3使用Session記錄會話狀態 170
5.7使用Redis進行持久化 173
5.7.1Node和Redis的互動 173
5.7.2CURD操作 174
5.7.3使用Redis持久化session 176
5.7.4Redis在Node中的套用 179
5.8Koa源碼剖析 180
5.8.1Koa的啟動過程 180
5.8.2中間件的載入 181
5.8.3listen()方法 184
5.8.4next()與returnnext() 185
5.8.5關於Can'tsetheadersaftertheyaresent. 186
5.8.6Context對象的實現 187
5.8.7Koa的優缺點 189
5.9網站部署 190
5.9.1本地部署 190
5.9.2部署在雲服務主機上 191
5.9.3通過GitHubpages來部署 193
5.10總結 194
5.11引用資源 194
第6章爬蟲系統的開發 195
6.1爬蟲技術概述 196
6.2技術棧簡介 196
6.2.1request.js 196
6.2.2cheerio 197
6.2.3訊息佇列 199
6.3構建腳手架 199
6.3.1選擇目標網站 199
6.3.2分析URL結構 200
6.3.3構建HTTP請求 200
6.3.4解析頁面元素 201
6.4進行批量爬取 203
6.4.1使用遞歸和定時器 203
6.4.2多進程並行 205
6.5爬蟲架構的改進 206
6.5.1異步流程控制 206
6.5.2回到最初的目標 206
6.5.3多進程模型的缺陷 208
6.6進程架構的改進 208
6.6.1生產/消費模型 208
6.6.2生產者的實現 209
6.6.3消費者的實現 211
6.7反爬蟲處理 213
6.7.1爬蟲的危害 213
6.7.2識別一個爬蟲 213
6.7.3針對爬蟲的處理 214
6.8總結 216
6.9引用資源 216
第7章測試與調試 217
7.1單元測試 218
7.1.1使用Assert模組 218
7.1.2Jasmine 219
7.1.3Ava.js——面向未來 224
7.2測試現有代碼 227
7.3更高維度的測試 228
7.3.1基準測試 228
7.3.2集成測試 229
7.3.3持續集成 229
7.4調試Node套用 231
7.4.1語言和IDE 232
7.4.2使用node-inspector 233
7.4.3使用v8-inspector 234
7.4.4使用IDE進行調試 236
7.4.5cpuprofiling 237
7.5總結 239
7.6引用資源 239
第8章Node中的錯誤處理 240
8.1Error模組 241
8.2錯誤處理的幾種方式 241
8.3被拋棄的Domain 243
8.3.1Domain模組簡介 243
8.3.2Domain原理 247
8.3.3Domain中間件 249
8.3.4Domain的缺陷 249
8.4ES6中的錯誤處理 250
8.4.1Promise 250
8.4.2Generator 250
8.4.3async函式 251
8.5Web服務中的錯誤處理 251
8.5.1針對每個請求的錯誤處理 251
8.5.2Express中的錯誤處理 252
8.5.3Koa中的錯誤處理 252
8.6防禦式編程與Letitcrash 253
8.7總結 256
8.8引用資源 256
附錄A進程、執行緒、協程 257
A.1從作業系統說起 257
A.2Node中的協程 258
附錄BLua語言簡介 259
B.1Lua中的數據類型 259
B.2定義一個函式 260
B.3Lua中的協程 261
附錄C從零開發一個NodeWeb框架 263
C.1框架的雛形 263
C.2框架的完善 264
C.3總結 268
附錄DMongoDB和Redis簡介 269
D.1NoSQL 269
D.2MongoDB簡介 269
D.3Redis簡介 271
附錄E使用Docker來實現虛擬化 274
E.1Docker的一些常用命令 274
E.2Redis服務 275
附錄Fnpm與包管理 277
F.1package.json常用欄位 277
F.2依賴版本的管理 278