-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

新時期的Node.js入門

( 簡體 字)
作者:李鍇類別:1. -> 程式設計 -> 網路編程 -> Node.js
譯者:
出版社:清華大學出版社新時期的Node.js入門 3dWoo書號: 48324
詢問書籍請說出此書號!

缺書
NT售價: 245

出版日:1/1/2018
頁數:273
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787302487807
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

國內Node的開發者很多都讀過樸靈寫的《深入淺出Node.js》(以下簡稱《深入淺出》)一書,筆者也不例外,筆者在2014年初第一次接觸Node,最初讀的幾本書就包含了這本《深入淺出》,該書出版于2013年12月,距今已經差不多有4年的時間了。
對于一門高速發展的語言來說,4年算得上很長的時間了。4年前Node的版本號還在0.10.x,而時至今日,已經迎來v8.0.0的最新版本了。
Node項目始于2009年,2013年恰好處在當今(2017年)和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框架的介紹,都屬于同類書中較少涉及的領域,但要是再過幾年的時間,本書的內容也會變得過時。

本書定位
關于本書的定位,筆者著實費了很大的腦筋,出版社老師建議我寫一本入門書,當我知道的時候其實內心是很猶豫的:一方面,Node的入門書籍市面上已經很多了,隨便翻開一本,不論是里面的內容還是章節編排都大同小異;另一方面,入門書反而是最難寫出水平的,因為作者們大多已經有了相關領域的編程經驗,那樣就很難站在入門者的角度來進行寫作。
經過考慮之后,我決定寫一本《新時期的Node.js入門》,一方面能夠讓本書立足于最新的技術潮流,另一方面對于ES201X又或者是Koa2來說,它們誕生的時間不長,筆者也不敢說自己對這些新的技術和標準已經有了豐富的編程經驗(之前使用最多的還是ES5語法和Express),正好也能站在一個入門者的角度來審視這些新技術。
本書的定位是一本新時期的Node入門書,關于“新”在哪里?一方面是內容的“新”,新的標準已經出現,怎么能夠停滯不前!ES2015帶來了不少新的語言特性,它讓之前需要花不少工夫才能解決的問題變得輕而易舉。另一方面,本書不想重復介紹同類書籍已經反復介紹的內容,例如Express框架的使用,在市面上翻開任意一本Node的入門書籍,都會不厭其煩地向讀者教授Express的各種用法,作為代替,本書推薦了Koa這一框架作為入門介紹,它更貼近新標準。
除了“如何使用”之外,本書還會兼顧Node底層的原理,讀者大可在第一遍時跳過這些內容,當對Node有了一個大概的掌握后,會自然而然地想去了解其背后的原理。
關于本書內容
本書不是一本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的發展歷史。
關于本書中的代碼
,它們都經過了充分的測試。
本書中,除了Node編寫的示例代碼外,還會穿插一些其他語言(例如Java)的代碼,這是為了通過和其他語言的對比讓讀者更好地理解Node中的特性。
筆者使用的電腦環境為 Mac OSX 10.11,本書中出現的代碼絕大多數都是平臺無關的,有一些代碼在Windows環境下運行會出現問題或者不能在Windows下運行,本書也做了相應的標注和提示。讀者在閱讀本書的時候,也建議打開自己的電腦,第一時間把代碼寫在文本編輯器或者IDE中。
本書面向的讀者
就像標題所說的,本書是一本入門書,適合在校的學生以及未接觸過Node的讀者閱讀。如果讀者有其他語言(例如Java)的編程經驗,那么讀起來可能會輕松一些,如果有使用JavaScript的經驗就再好不過了。
如何學習Node
學習一門編程語言的最好辦法,就是將其運用在實際的項目當中,但對于大多數開發者,尤其是自己目前的工作與Node無關時,想找到合適的項目并不容易,大多數人做的還只是非常簡單的個人項目,例如一個TODO List,復雜一點的比如一個博客網站,這些都算不上什么復雜的項目,從里面得到的經驗也少得可憐。
那些能處理高并發、擁有各種多進程架構的項目不是每個人都有機會做,那么到哪里去找有一些難度的Node項目練手呢?
那就只能把目光投向GitHub了,使用GitHub的搜索功能來尋找一些企業級的Node應用,如果感興趣的話就試著提交代碼,為開源項目貢獻代碼通常是一個不錯的加分項。
雖然有點王婆賣瓜,但筆者認為本書第7章的項目還是有一定的復雜度的,針對多進程和分布式的擴展還有很大的想象空間,讀者可以借助GitHub參與到共同開發上來。
名稱約定
為了便于區分,JavaScript在本書中特指對ECMAScript的實現,除非特別注明,那么它代表了ES5的標準,并且同時適用于瀏覽器JavaScript和Node。當有些代碼和概念特指在瀏覽器端運行的JavaScript時,我們一律使用“前端JavaScript”來稱呼。
當使用ECMAScript這一稱謂(例如ES2017)時,大多數是談論標準內容,不涉及具體的實現。
糾錯
筆者畢竟能力有限,在出版本書的時候可能有沒有注意到的錯誤,例如代碼運行出錯、概念上的不正確等,如果讀者有相關的發現,請以“××章××小結代碼/內容錯誤”為標題發郵件至筆者的郵箱。
致謝
首先要特別感謝的是出版社的夏毓彥編輯,是他讓我有機會梳理迄今為止對Node的心得,然后得以出版。
另一方面還要感謝我的母親,當我第一次將自己準備寫書的想法告訴她時,不出意外地,她開始懷疑起我的水平來,“就你還想出書?可不要誤人子弟啊”。
正是這句話,不斷提醒我對內容進行反復修改和驗證。因為我意識到這和平時的博客文章不同,是更加嚴肅,并且對錯誤的容忍更低的作品。雖然她沒有編程相關的經驗,但我還是準備將第一本樣書送給她,希望她能夠閱讀。

著者
2017年12月



內容簡介:

Node.js是一門開源的、為Web而生的語言,具有高并發、異步等特點,并且擁有一個十分活躍的開發者社區。與Ruby、Python等語言相比,Node.js更年輕、更易于沒有經驗的人上手使用,因此很快在世界各地的開發者中收獲了一大批擁躉。在國內,Node.js在許多企業中獲得了廣泛應用,并取得了一系列的應用成果。然而,隨著技術的不斷更新、ECMAScript2015等新標準紛紛確定,現有的中文書籍就變得有些過時。本書立足于新的技術潮流,介紹了一系列全新的語言特性和標準,以便讓讀者在學習基礎知識的同時緊跟新技術的發展。
本書分為8章6個附錄,講解了Node.js的各種基礎特性,使讀者快速入門,同時結合語言最新的發展趨勢,讓讀者能夠緊跟技術潮流。本書圍繞Node.js在Web站點開發和爬蟲系統中的應用展開,對Node.js在大型項目中的定位與應用做了詳細的說明。
本書可用于Node.js入門,適合未接觸過Node的讀者以及在校的學生閱讀,也適合作為高等院校和培訓學校相關專業的師生教學參考。
目錄:

第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關于Cantsetheadersaftertheyaresent. 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
序: