第一部分 Node基礎知識介紹
第1章 歡迎進入Node.js的世界 2
1.1 一個典型的Node Web應用程序 2
1.1.1 非阻塞I/O 3
1.1.2 事件輪詢 4
1.2 ES2015、Node和V8 5
1.2.1 Node與V8 7
1.2.2 使用特性組 8
1.2.3 瞭解Node的發布計劃 8
1.3 安裝Node 8
1.4 Node自帶的工具 9
1.4.1 npm 9
1.4.2 核心模塊 10
1.4.3 調試器 11
1.5 三種主流的Node程序 12
1.5.1 Web應用程序 12
1.5.2 命令行工具和後颱程序 13
1.5.3 桌麵程序 14
1.5.4 適閤Node的應用程序 14
1.6 總結 15
第2章 Node編程基礎 16
2.1 Node功能的組織及重用 16
2.2 開始一個新的Node項目 18
2.3 用module.exports微調模塊的創建 20
2.4 用node_modules重用模塊 22
2.5 注意事項 23
2.6 使用異步編程技術 24
2.7 用迴調處理一次性事件 25
2.8 用事件發射器處理重復性事件 28
2.8.1 事件發射器示例 28
2.8.2 響應隻應該發生一次的事件 29
2.8.3 創建事件發射器:一個PUB/SUB的例子 29
2.8.4 擴展事件監聽器:文件監視器 32
2.9 異步開發的難題 34
2.10 異步邏輯的順序化 35
2.11 何時使用串行流程控製 36
2.12 實現串行化流程控製 37
2.13 實現並行化流程控製 39
2.14 利用社區裏的工具 41
2.15 總結 43
第3章 Node Web程序是什麼 44
3.1 瞭解Node Web程序的結構 45
3.1.1 開始一個新的Web程序 45
3.1.2 跟其他平颱比一比 47
3.1.3 然後呢 47
3.2 搭建一個RESTful Web服務 47
3.3 添加數據庫 50
3.3.1 製作自己的模型API 51
3.3.2 讓文章可讀並把它存起來 53
3.4 添加用戶界麵 54
3.4.1 支持多種格式 54
3.4.2 渲染模闆 55
3.4.3 用npm管理客戶端依賴項 56
3.5 總結 57
第二部分 Node的Web開發
第4章 前端構建係統 60
4.1 瞭解基於Node的前端開發 60
4.2 用npm運行腳本 61
4.2.1 創建定製的npm腳本 62
4.2.2 配置前端構建工具 63
4.3 用Gulp實現自動化 63
4.3.1 把Gulp添加到項目中 64
4.3.2 Gulp任務的創建及運行 64
4.3.3 監測變化 66
4.3.4 在大項目中把任務分散到不同文件中 66
4.4 用Webpack構建Web程序 67
4.4.1 使用打包器和插件 67
4.4.2 配置和運行Webpack 68
4.4.3 用Webpack開發服務器 68
4.4.4 加載CommonJS模塊和靜態資源 70
4.5 總結 71
第5章 服務器端框架 72
5.1 用戶畫像 72
5.1.1 菲爾:代理開發者 73
5.1.2 納迪娜:開源開發者 73
5.1.3 愛麗絲:産品開發者 73
5.2 框架是什麼 74
5.3 Koa 74
5.3.1 設置 76
5.3.2 定義路由 76
5.3.3 REST API 77
5.3.4 優點 77
5.3.5 弱點 77
5.4 Kraken 77
5.4.1 設置 77
5.4.2 定義路由 78
5.4.3 REST API 79
5.4.4 優點 79
5.4.5 弱點 79
5.5 hapi 79
5.5.1 設置 80
5.5.2 定義路由 80
5.5.3 插件 81
5.5.4 REST API 82
5.5.5 優點 83
5.5.6 弱點 83
5.6 Sails.js 83
5.6.1 設置 83
5.6.2 定義路由 84
5.6.3 REST API 84
5.6.4 優點 85
5.6.5 弱點 85
5.7 DerbyJS 85
5.7.1 設置 85
5.7.2 定義路由 86
5.7.3 REST API 87
5.7.4 優點 87
5.7.5 弱點 87
5.8 Flatiron.js 87
5.8.1 設置 88
5.8.2 定義路由 88
5.8.3 REST API 89
5.8.4 優點 90
5.8.5 弱點 90
5.9 LoopBack 90
5.9.1 設置 91
5.9.2 定義路由 92
5.9.3 REST API 92
5.9.4 優點 93
5.9.5 弱點 93
5.10 比較 93
5.11 編寫模塊化代碼 95
5.12 用戶選擇 95
5.13 總結 95
第6章 深入瞭解Connect和Express 96
6.1 Connect 96
6.1.1 創建Connect程序 97
6.1.2 瞭解Connect中間件的工作機製 97
6.1.3 組閤中間件 98
6.1.4 中間件的順序 98
6.1.5 創建可配置的中間件 99
6.1.6 使用錯誤處理中間件 101
6.2 Express 103
6.2.1 生成程序框架 103
6.2.2 Express和程序的配置 107
6.2.3 渲染視圖 109
6.2.4 Express路由入門 113
6.2.5 用戶認證 120
6.2.6 注冊新用戶 124
6.2.7 已注冊用戶登錄 130
6.2.8 用戶加載中間件 133
6.2.9 創建REST API 134
6.2.10 啓用內容協商 140
6.3 總結 142
第7章 Web程序的模闆 143
7.1 用模闆保持代碼的整潔性 143
7.2 Embedded JavaScript的模闆 147
7.2.1 創建模闆 148
7.2.2 將EJS集成到你的程序中 149
7.2.3 在客戶端程序中使用EJS 150
7.3 使用Mustache模闆語言與Hogan 151
7.3.1 創建模闆 151
7.3.2 Mustache標簽 151
7.3.3 微調Hogan 154
7.4 用Pug做模闆 154
7.4.1 Pug基礎知識 155
7.4.2 Pug模闆中的邏輯 157
7.4.3 組織Pug模闆 159
7.5 總結 163
第8章 存儲數據 164
8.1 關係型數據庫 164
8.2 PostgreSQL 164
8.2.1 安裝及配置 164
8.2.2 創建數據庫 165
8.2.3 從Node中連接Postgres 165
8.2.4 定義錶 166
8.2.5 插入數據 166
8.2.6 更新數據 166
8.2.7 查詢數據 167
8.3 Knex 167
8.3.1 查詢構建器 168
8.3.2 用Knex實現連接和查詢 168
8.3.3 切換數據庫 170
8.3.4 注意抽象漏洞 171
8.4 MySQL和PostgreSQL 171
8.5 ACID保證 172
8.5.1 原子性:無論成敗,事務必須整體執行 172
8.5.2 一緻性:始終確保約束條件 172
8.5.3 隔離性:並發事務不會相互乾擾 172
8.5.4 耐用性:事務是永久性的 173
8.6 NoSQL 173
8.7 分布式數據庫 173
8.8 MongoDB 174
8.8.1 安裝和配置 174
8.8.2 連接MongoDB 174
8.8.3 插入文檔 175
8.8.4 查詢 176
8.8.5 使用MongoDB標識 177
8.8.6 使用復製集 178
8.8.7 瞭解寫關注 180
8.9 鍵/值存儲 181
8.10 Redis 181
8.10.1 安裝和配置 182
8.10.2 初始化 182
8.10.3 處理鍵/值對 183
8.10.4 處理鍵 184
8.10.5 編碼與數據類型 184
8.10.6 使用散列錶 186
8.10.7 使用列錶 186
8.10.8 使用集閤 187
8.10.9 用頻道實現發布/訂閱功能 188
8.10.10 提升性能 189
8.11 嵌入式數據庫 189
8.12 LevelDB 190
8.12.1 LevelUP與LevelDOWN 190
8.12.2 安裝 191
8.12.3 API概覽 191
8.12.4 初始化 191
8.12.5 鍵/值編碼 192
8.12.6 鍵/值對的讀寫 192
8.12.7 可插拔的後颱 193
8.12.8 模塊化數據庫 194
8.13 昂貴的序列化和反序列化 195
8.14 瀏覽器內存儲 196
8.14.1 Web存儲:localStorage和sessionStorage 196
8.14.2 值的讀寫 197
8.14.3 localForage 199
8.14.4 讀和寫 199
8.15 存儲托管 200
8.16 選哪個數據庫 201
8.17 總結 201
第9章 測試Node程序 202
9.1 單元測試 203
9.1.1 assert模塊 203
9.1.2 Mocha 206
9.1.3 Vows 211
9.1.4 Chai 213
9.1.5 Should.js 214
9.1.6 Sinon.JS的探測器和存根 216
9.2 功能測試 218
9.3 處理失敗的測試 221
9.3.1 獲取更詳細的日誌 221
9.3.2 更好的棧跟蹤 223
9.4 總結 224
第10章 Node程序的部署及運維 225
10.1 安置Node程序 225
10.1.1 平颱即服務 226
10.1.2 服務器 227
10.1.3 容器 228
10.2 部署的基礎知識 229
10.2.1 從Git庫部署 229
10.2.2 保證Node不掉綫 230
10.3 在綫時長和性能的最大化 231
10.3.1 用Upstart保證在綫時長 232
10.3.2 集群API:充分利用多核處理器 233
10.3.3 靜態文件及代理 235
10.4 總結 236
第三部分 超越Web開發
第11章 編寫命令行程序 238
11.1 瞭解慣例和理念 238
11.2 parse-json 239
11.3 使用命令行參數 239
11.3.1 解析命令行參數 239
11.3.2 驗證參數 240
11.3.3 將stdin作為文件傳遞 241
11.4 用npm分享命令行工具 242
11.5 用管道連接腳本 243
11.5.1 將數據通過管道傳給parse-json 243
11.5.2 處理錯誤和退齣碼 243
11.5.3 在Node中使用管道 245
11.5.4 管道與命令的執行順序 246
11.6 解釋真正的腳本 247
11.7 總結 247
第12章 用Electron徵服桌麵 248
12.1 認識Electron 248
12.1.1 Electron的技術棧 249
12.1.2 界麵設計 250
12.2 創建一個Electron程序 250
12.3 搭建完整的桌麵端程序 252
12.3.1 引導React與Babel 253
12.3.2 安裝依賴項 253
12.3.3 設置Webpack 254
12.4 React程序 255
12.4.1 定義Request組件 256
12.4.2 定義Response組件 258
12.4.3 React組件之間的通信 261
12.5 構建與分發 261
12.5.1 用Electron打包器構建程序 261
12.5.2 打包 262
12.6 總結 263
附錄A 安裝Node 264
附錄B 自動化的網絡抓取 267
附錄C Connect的官方中間件 277
術語錶 307
· · · · · · (
收起)