Node.js 實戰, 2/e (Node.js in Action, 2/e)
內容描述
本書是Node.js的實戰教程,涵蓋了為開發產品級Node應用程序所需要的一切特性、技巧以及相關理念。 從搭建Node開發環境,到一些簡單的演示程序,到開發復雜應用程序所必不可少的異步編程。D2版介紹了全棧kai發者所需的全部技術,包括前端構建系統、選擇Web框架、在Node中與數據庫的交互、編寫測試和部署Web程序,等等。
目錄大綱
第一部分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
D二部分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菲爾:代理kai發者73
5.1.2納迪娜:開源kai發者73
5.1.3愛麗絲:產品kai發者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在線時長和性能的zui大化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
作者介紹
作者:[英]亞歷克斯·楊(Alex Young),[美]布拉德利·馬克(Bradley Meck),[美]麥克·坎特倫(Mike Cantelon)譯者:吳海星
亞歷克斯·楊(Alex Young),經驗豐富的Webkai發者,廣受歡迎的JavaScript社區DailyJS創始人。目前任職於Apple。另著有《Node.js硬實戰》。
布拉德利·馬克(Bradley Meck),TC39和Node.js基金會成員。業餘時間醉心於為JavaScript製作工具、園藝和指導學生。
麥克·坎特倫(Mike Cantelon),Node.js核心框架貢獻者,Node社區活躍分子,培訓師和演講人。
蒂姆·奧克斯利(Tim Oxley),JavaScript(Node.js/React)自由撰稿人。
馬克·哈特(Marc Harter),Node.js核心框架貢獻者。
TJ霍洛瓦丘(TJHolowaychuk),參與開發了很多Node.js模塊,包括流行的Express框架。
內森·拉伊利赫(Nathan Rajlich),大名鼎鼎的TooTallNate,Node.js核心代碼提交者。