了不起的Node.js: 將JavaScript進行到底

broadviewbj發表於2013-11-29

了不起的Node.js: JavaScript進行到底(Web開發首選,實時,跨多伺服器,高併發

Guillermo Rauch   

趙靜 譯

ISBN 978-7-121-21769-2

20141月出版

定價:79.00

320

16


編輯推薦

Node.js是一個由JavaScript書寫而成的強大的web開發框架,它讓開發強壯的、伸縮性良好的服務端web應用變得更加簡單,容易。本書向你展示了什麼是Node以及如何讓你在專案中使用它。本書包含大量實際應用中的示例程式,證明了為什麼Node.js會快速成為web開發首選工具的原因,透過本書,你能夠快速熟悉和掌握達到如下目標所需的Node知識和技能:

瞭解Node基於事件輪詢的架構、無阻塞IO以及事件驅動的程式設計方式

精通Node.jsAPI

輕鬆實現開發實時應用相關的技術,如SOCKET.IOHTML5 WEBSOCKETS

編寫能夠支援跨多臺伺服器的高併發應用

透過Node來支援多種資料庫以及資料儲存工具

編寫在單臺伺服器情況下能夠處理萬級併發量的程式

能夠在一個包含更多Node知識和註解示例(含原始碼)的網站上和其他開發者進行實時地溝通交流

本書包含大量全綵插圖和實用的原始碼,絕對是一本革命性web開發工具——Node的實用指南。

內容提要

本書是一本經典的 Learning by Doing的書籍。它由 Node社群著名的 Socket.IO作者—— Guillermo Rauch,透過大量的實踐案例撰寫,並由 Node社群非常活躍的開發者—— Goddy Zhao翻譯而成。

本書內容主要由對五大部分的介紹組成: Node核心設計理念、 Node核心模組 APIWeb開發、資料庫以及測試。從前到後、由表及裡地對使用 Node進行 Web開發的每一個環節都進行了深入的講解,並且最大的特點就是透過大量的實際案例、程式碼展示來剖析技術點,講解最佳實踐。

目錄

PART  從安裝與概念開始

CHAPTER 1 安裝............................................... 3

Windows下安裝............................................... 3

OS.X下安裝. ................................................ 4

Linux下安裝................................................. 5

編譯. ............................................................5

確保安裝成功. ...............................................5

Node.REPL................................................. 5

執行檔案.......................................................... 6

NPM................................................................. 6

安裝模組...........................................................7

自定義模組. .......................................................8

安裝二進位制工具包. ..................................................9

瀏覽NPM倉庫. .......................................................9

小結................................................................. 10

CHAPTER 2 JavaScript概覽.........................................11

介紹.......................................................... 11

JavaScript基礎..................................................... 12

型別. ......................................................... 12

型別的困惑. ............................................... 12

函式. .......................................................... 13

THISFUNCTION #CALL以及FUNCTION#APPLY.................... 14

函式的引數數量. ........................... 14

閉包. ........................................................ 14

. .............................................................. 15

繼承. ..................................................... 16

TRY.{}.CATCH.{}...................................... 17

v8中的JavaScript............................... 17

OBJECT#KEYS....................................................... 18

ARRAY#ISARRAY................................................ 18

陣列方法................................................. 18

字串方法.. .................................................... 19

JSON............................................................. 19

FUNCTION#BIND....................................................... 19

 FUNCTION#NAME.............................................. 19

_PROTO_(繼承). ............................................ 20

存取器....................................................... 20

小結.............................................................. 21

CHAPTER 3 阻塞與非阻塞IO................................. 23

能力越強,責任就越大................................................. 23

阻塞. ............................................................. 25

單執行緒的世界. ............................................... 27

錯誤處理..................................................... 29

堆疊追蹤................................................ 30

小結............................................................... 32

CHAPTER 4 Node中的JavaScript ..................................... 33

global物件....................................................... 33

實用的全域性物件. ................................................ 34

模組系統............................................................ 34

絕對和相對模組. .................................................. 35

暴露API. ............................................................... 37

事件......................................................... 38

 buffer............................................................... 40

小結................................................................... 41

 PART  Node重要的API

CHAPTER 5 命令列工具(CLI)以及FS API:首個Node應用................... 45

需求................................................. 45

編寫首個Node程式...................................... 46

建立模組.............................................. 46

同步還是非同步. ............................ 47

理解什麼是流(stream................................... 49

輸入和輸出. .......................................................... 50

重構. ........................................ 53

fs進行檔案操作. .............................. 55

CLI一探究竟. ................................................. 56

argv.................................................... 57

工作目錄...................................... 57

環境變數........................................... 58

退出. ............................................... 58

訊號. .......................................................... 58

ANSI轉義碼............................................ 59

fs一探究竟. ................................................. 59

Stream......................................................... 59

監視. .......................................... 60

小結...................................................... 61

CHAPTER 6 TCP ........................................... 63

TCP有哪些特性. ..................................................... 64

面向連線的通訊和保證順序的傳遞. ........................... 64

面向位元組........................................ 65

可靠性............................................... 65

流控制......................................... 65

擁堵控制.............................................. 65

Telnet................................................................ 65

基於TCP的聊天程式............................................... 68

建立模組..................................... 68

理解NET.SERVER.API........................ 68

接收連線....................................... 70

data事件. ...................................................... 71

狀態以及記錄連線情況. ........................................ 73

圓滿完成此程式. ............................................ 75

一個IRC客戶端程式.......................................... 77

建立模組.............................................. 77

理解NET#STREAM.API.. ......................................... 78

實現部分IRC協議. .................................................. 78

測試實際的IRC伺服器. .................................. 78

小結................................................................. 79

CHAPTER 7 HTTP .................................................. 81

HTTP結構......................................................... 81

頭資訊. ...................................................... 82

連線.............................................................. 87

一個簡單的Web伺服器.................................................. 88

建立模組....................................... 88

輸出表單.................................................... 88

methodURL. ........................................... 90

資料. .............................................. 92

整合. ................................................ 94

讓程式更健壯. ..................................... 95

一個Twitter.Web客戶端......................................... 96

建立模組....................................... 96

傳送一個簡單的HTTP請求. ...................... 97

傳送資料......................................... 98

獲取推文................................................. 99

superagent來拯救.............................................. 102

使用up重啟HTTP伺服器..................................... 103

小結............................................. 104

PART Ⅲ Web開發

CHAPTER 8 Connect .............................. 107

使用HTTP構建一個簡單的網站. ....................................... 108

透過Connect實現一個簡單的網站...................................... 111

中介軟體. ................................................. 112

書寫可重用的中介軟體. .........................114

static中介軟體. .............................................119

query中介軟體. .......................................120

logger中介軟體................................................... 120

body.parser中介軟體. .................................122

cookie.........................................................125

會話(session. ......................................126

Redis.session..................................................131

methodOverride中介軟體. ...........................132

basicAuth中介軟體. ......................................132

小結.............................................................. 134

CHAPTER 9 Express..................................................135

一個小型Express應用. ...................................... 135

建立模組..............................................136

 HTML...........................................................136

 SETUP..........................................................137

定義路由............................................137

查詢. .................................................140

執行. .....................................................141

設定......................................................... 142

模板引擎...................................................... 143

錯誤處理........................................................ 144

快捷方法................................................. 144

路由................................................ 146

中介軟體. .................................................... 148

程式碼組織策略. ......................................... 149

小結................................................. 151

CHAPTER 10 WebSocket .................. 153

Ajax.............................................. 153

HTML5.WebSocket............................................... 156

一個ECHO示例. ......................................................... 157

初始化專案. .............................................157

建立伺服器. ..................................................158

建立客戶端. ......................................159

執行示例程式. ...................................160

滑鼠游標.......................................... 161

初始化示例程式. .........................................161

建立伺服器. ............................................161

建立客戶端. .....................................164

執行示例程式. .........................................166

面臨一個挑戰. ............................................. 166

關閉並不意味著斷開連線. .............................166

JSON...........................................167

重連. ...................................................167

廣播. ................................................167

WebSocket屬於HTML5:早期瀏覽器不支援. ..........................167

解決方案.................................................167

小結............................................................. 167

CHAPTER 11 Socket.IO.............................................169

傳輸................................................. 170

斷開.VS.關閉. ............................................170

事件. ..........................................170

名稱空間..............................................171

聊天程式................................................. 172

初始化程式. .......................................172

構建伺服器. ..........................................172

構建客戶端. .......................................173

事件和廣播. ........................................175

訊息接收確認. .................................179

一個輪流做DJ的應用................................ 180

擴充套件聊天應用. ...........................................181

整合Grooveshark.API. ...............................182

播放歌曲...............................................185

小結.................................................... 190

PART Ⅳ 資料庫

CHAPTER 12 MongoDB.......................193

安裝.................................................. 195

使用MongoDB:一個使用者認證的例子. .................................. 195

構建應用程式. .......................................195

建立Express.App.. ..............................196

連線MongoDB. ...................................200

建立文件......................................201

查詢文件..................................203

身份驗證中介軟體. ..................................204

校驗.. ..............................................205

原子性..............................................206

安全模式................................206

Mongoose介紹......................................... 206

定義模型........................................207

定義巢狀的鍵. ..........................208

定義巢狀文件. .....................................209

構建索引..........................................209

中介軟體.................................................209

探測模型狀態.. ...............................210

查詢. ..............................................210

擴充套件查詢........................................210

排序.. ........................................211

選擇. ......................................................211

限制.. .....................................211

跳過. .........................................211

自動產生鍵. ...............................211

轉換. ..............................................212

一個使用Mongoose的例子........................................ 212

構建應用.................................212

重構. ..............................213

建立模型.................................213

小結.......................................... 215

CHAPTER 13 MySQL...........................................217

node-mysql........................................ 217

初始化專案. .......................................217

Express應用. ...................................218

連線MySQL. .....................................219

初始化指令碼. .......................................220

建立資料................................................224

獲取資料.....................................228

sequelize............................................ 229

初始化sequelize. ................................230

初始化Express應用. ....................................230

連線sequelize. .........................233

定義模型和同步. ........................... 234

建立資料.................................236

獲取資料......................................238

刪除資料..............................239

完整地完成應用. ...............................240

小結.......................................... 241

CHAPTER 14 Redis......................................... 243

安裝Redis............................................... 244

Redis查詢語言. ............................................... 245

資料型別............................................. 245

字串. ...................................246

雜湊. .................................................246

列表. ......................................... 248

資料集. .....................................249

有序資料集. .........................................249

RedisNode. .......................................... 249

使用node-redis實現一個社交圖譜. .............250

小結......................................... 259

PART Ⅴ 測試

CHAPTER 15 程式碼共享 ................................. 263

什麼樣的程式碼可以共享........................................... 263

書寫相容的JavaScript程式碼................................ 264

匯出模組......................................................264

模擬實現ECMA.API. ................................265

模擬實現Node.API. ......................................267

模擬實現瀏覽器端API. ...............................267

跨瀏覽器的繼承實現. ...........................268

整合到一起:browserbuild. ...................... 268

基礎案例....................................269

小結......................................... 271

CHAPTER 16 測試................................... 273

簡單測試........................................ 273

測試目標............................................. 274

測試策略................................... 274

測試程式...................................................275

expect.js................................................. 276

API一覽. .........................................276

Mocha................................................. 278

測試非同步程式碼. ..................................279

BDD風格. ................................281

TDD風格. .......................................281

export風格. .................................282

在瀏覽器端使用Mocha. ...................................282

小結.................................... 284

索引 ...................................... 285

作者簡介

Guillermo Rauch(舊金山,加利福尼亞州)是一家位於舊金山,為

當地教育提供相關服務的創業公司LearnBoostCTO和聯合創始人。

Rauch還是幾個知名Node.js專案的發明者,曾在JSConf和一些

Node.js workshop做過演講。"

譯者介紹:

Goddy Zhao(本名趙靜),Successfactors(SAP子公司)軟體工程師。畢業於復旦大學,先後在IBM、淘寶工作過,專注於企業級富客戶端Web應用的開發,擅長前後端相結合的技術解決方案。曾與人合譯過多本前端圖書,並曾在滬JSD2前端技術論壇擔任過主持人和演講嘉賓。個人主頁http//goddyzhao.me

媒體評論

本書寫作精良 ——Amazon.com讀者Shawn Rapp

本書直指要點,且無無用廢話,可謂字字珠璣——Amazon.com讀者Pragmateek

本書定位精確,用大量簡單但魯棒性強的模式幫助初學者走上用Node.js建立更復雜應用之路。這種簡明扼要的寫法很招人喜歡,面向教學做得很成功,是一本有效使用Node.js的參考書。——Amazon.com讀者Pmjtoca

前言

絕大部分 Web應用都包含客戶端和伺服器端兩部分。伺服器端的實現往往比較複雜、麻煩。建立一個簡單的伺服器都要求對多執行緒、伸縮性以及伺服器部署有專業的技術知識。除此之外,由於客戶端軟體是用 HTMLJavaScript來實現的,而伺服器端核心程式碼通常都是用靜態程式語言實現的,所以,開發 Web應用經常會有錯亂的感覺。由於這種前後端開發語言的差異,不得不讓開發者使用多種程式語言,同時還要對特定的程式邏輯事先做好設計選型。

幾年前,要用 JavaScript來實現服務端軟體幾乎是想都不敢想的一件事情。糟糕的效能、不成熟的記憶體管理以及缺乏作業系統層面的整合,不解決這些問題, JavaScript很難成為一門伺服器端的語言。作為 Google Chrome瀏覽器的一部分,新的 V8引擎能夠解決前兩個問題。 V8是一個開源的專案,透過簡單的 API就可以將其整合進去。

Ryan Dahl洞察到了這樣一個機會,可以透過將 V8內嵌到作業系統的整合層,來讓 JavaScript享受到底層作業系統的非同步介面,從而實現將其帶到伺服器端的目的。這就是 Node.js的設計思路。這麼做的好處是顯而易見的。程式設計師們可以在客戶端和伺服器端使用同樣的程式語言了。 JavaScript動態語言的特性使得開發和試驗伺服器端程式碼變得很自由,使得程式設計師們擺脫了傳統那種又慢又重的程式設計模式。

Node.js迅速躥紅,衍生了一個強大的開源社群、支援企業,甚至還擁有屬於自己的技術大會。我把這種成功歸結於它的簡潔,高效,同時提高了程式設計生產力。我很高興 V8成為其一小部分。

本書將帶著讀者學習如何基於 Node.jsWeb應用構建伺服器端部分,同時還會帶著大家學習如何組織伺服器端非同步程式碼以及如何與資料庫進行互動。

好好享受這本書帶來的樂趣吧!

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13164110/viewspace-1061612/,如需轉載,請註明出處,否則將追究法律責任。

相關文章