《Node.js高級編程》主要內(nèi)容: 介紹了查詢和讀寫文件 研究了流、文件系統(tǒng)、網(wǎng)絡(luò)和臼動(dòng)化單元測試 詳細(xì)描述了如何讀寫數(shù)據(jù)流 從零開始構(gòu)建TCP和HTTP服務(wù)器與客戶端 介紹使用數(shù)據(jù)報(bào)、測試和調(diào)試模塊以及控制回調(diào)流程 展示了如何用Connect、Express和Socke.10開發(fā)實(shí)時(shí)Web應(yīng)用程序 引導(dǎo)你連接到MySQL、CouchDB和MongoDB數(shù)據(jù)庫
在1995年,也就是大學(xué)二年級時(shí)我開始接觸UNIX網(wǎng)絡(luò)編程。在C語言中,可以針對服務(wù)器的開放TCP連接創(chuàng)建套接字,并編寫服務(wù)器代碼來接受連接。我還記得第一次創(chuàng)建TCP服務(wù)器的興奮勁:我可以接受連接,并且能在服務(wù)器上收發(fā)消息。
如果我希望服務(wù)器接受大量并發(fā)連接,一般的解決方案是使用線程,不久之后我就創(chuàng)建了自己的第一個(gè)多線程TCP服務(wù)器,這個(gè)服務(wù)器會(huì)訪問一個(gè)共享數(shù)據(jù)結(jié)構(gòu),這個(gè)數(shù)據(jù)結(jié)構(gòu)要同步大量產(chǎn)生的客戶端線程的訪問。事實(shí)已經(jīng)證明,讓同步精細(xì)化(最大化資源和時(shí)間)和正確(避免死鎖)要比預(yù)計(jì)的困難。
幾年后,我成為一名顧問,從事編程工作,并領(lǐng)導(dǎo)程序員團(tuán)隊(duì)實(shí)現(xiàn)不同的客戶端項(xiàng)目。一開始我還是繼續(xù)從事UNIX領(lǐng)域的工作,但是不久之后就轉(zhuǎn)而關(guān)注Java和它的企業(yè)化風(fēng)格,最終落腳于使用PHP和Ruby這樣的腳本語言進(jìn)行豐富多彩的Web開發(fā)。在從事Web開發(fā)時(shí),我慢慢地開始熟悉JavaScript和事件驅(qū)動(dòng)編程模型,卻從未意識到這會(huì)讓我再次與UNIX世界聯(lián)系到一起。
時(shí)間很快就到了2010年初,我的一位好朋友跟我談到Node.js,他說:“你可以用JavaScript對Node.js進(jìn)行快速編程”。Node.js將事件驅(qū)動(dòng)的瀏覽器編程引入了UNIX網(wǎng)絡(luò)編程世界。
出于好奇,我翻閱了一下Node.js的API文檔,立刻就被它吸引住了。這種不使用線程就能創(chuàng)建具有高度可伸縮性的服務(wù)器的易用性以及混搭的服務(wù)器與客戶端代碼促使我深入研究了Node的源代碼以及周邊模塊,Node.js將腳本語言的易用性與UNIX網(wǎng)絡(luò)編程能力全面結(jié)合起來,我感覺自己終于回家了。
本書讀者對象
本書是為那些熟練使用JavaScript進(jìn)行瀏覽器或者服務(wù)器編程的開發(fā)者編寫的,讀者應(yīng)該熟悉有關(guān)TCP和HTTP運(yùn)行的基本概念。對于后面有關(guān)Web應(yīng)用程序開發(fā)的幾章而言,如果讀者熟悉傳統(tǒng)的Web開發(fā)也會(huì)大有裨益。
如果你已經(jīng)安裝了Node.js,就可以跳過第2章“Node簡介”。
如果你已經(jīng)了解了Node.js內(nèi)部運(yùn)行的基本原理,并具有使用JavaScript進(jìn)行服務(wù)器端事件驅(qū)動(dòng)編程的基礎(chǔ),那么可以跳過第3章“加載模塊”。
在介紹了Node.js的核心概念及API子集之后,我將會(huì)在第17章(“測試模塊及應(yīng)用程序”)中開始構(gòu)建應(yīng)用程序,并在第18章(“調(diào)試模塊及應(yīng)用程序”)中介紹調(diào)試,此外將在第19章(“控制回調(diào)流程”)中提出幾個(gè)控制異步流程的要點(diǎn)。
接下來,我會(huì)闡述構(gòu)建Web應(yīng)用程序時(shí)幾個(gè)必不可少的部分,從第20章(“構(gòu)建和使用HTTP中間件”)開始,一直持續(xù)到Express.js(第21章),此外還會(huì)用Socket.IO(第22章)來創(chuàng)建實(shí)時(shí)Web應(yīng)用程序。
最后,將會(huì)介紹在Node中如何訪問和使用數(shù)據(jù)庫,包括MySQL(第23章)、CouchDB(第24章)和MongoDB(第25章)。
本書涉及的內(nèi)容
本書涉及Node.js v0.8、Express.js v2.5、Socket.io 0.9、Node-mysql v0.9、Nano v3.1以及Mongoose v2.7。
本書組織結(jié)構(gòu)
本書從安裝和介紹Node.js開始。
然后闡述了Node的核心基礎(chǔ),包括模塊、緩沖區(qū)、事件發(fā)射器模式以及定時(shí)器,之后介紹和闡述了Node中有關(guān)文件和網(wǎng)絡(luò)的核心基礎(chǔ)API,這些內(nèi)容都會(huì)輔之以一些實(shí)用的示例。
介紹完Node的核心概念之后,本書接下來就會(huì)用Node.js進(jìn)行以一些應(yīng)用程序開發(fā)的最佳實(shí)踐,比如測試模塊、調(diào)試應(yīng)用程序、維護(hù)對異步回調(diào)流程的控制。
構(gòu)建實(shí)時(shí)Web應(yīng)用程序是Node的主要用途之一,本書會(huì)向你展示如何使用Connect、Express.js和Socket.IO。
由于大多數(shù)應(yīng)用程序都需要連接數(shù)據(jù)庫,因此本書還講述了如何在Node.js中連接和使用MySQL、CouchDB以及MongoDB。
使用本書的需求
為了安裝和運(yùn)行Node.js應(yīng)用程序,需要一臺PC計(jì)算機(jī)或者一臺Macintosh計(jì)算機(jī)運(yùn)行最新版本的Node.js,Windows版、Linux版和MacOS版可以任選其一。
書中示例的源代碼可以在Wrox的網(wǎng)站上下載,網(wǎng)址是:www.wrox.com/remtitle.cgi? isbn=P010093766。
源代碼
在讀者學(xué)習(xí)本書中的示例時(shí),可以手動(dòng)輸入所有代碼,也可以使用本書附帶的源代碼文件。本書使用的所有源代碼都可以從本書合作站點(diǎn)http://www.wrox.com/或http://www. tupwk.com.cn/downpage上下載。登錄到站點(diǎn)http://www.wrox.com/,使用Search工具或使用書名列表就可以找到本書。接著單擊Download Code鏈接,就可以獲得所有的源代碼。既可以選擇下載一個(gè)大的包含本書所有代碼的ZIP文件,也可以只下載某個(gè)章節(jié)中的代碼。
在下載代碼后,只需用解壓縮軟件對它進(jìn)行解壓縮即可。另外,也可以進(jìn)入http://www. wrox.com/dynamic/books/download.aspx上的Wrox代碼下載主頁,查看本書和其他Wrox圖書的所有代碼。記住,可以使用書中列出的程序清單的編號容易地找到所要尋找的代碼,如“程序清單0-1”。
當(dāng)為大多數(shù)可下載的源代碼文件命名時(shí),我們會(huì)使用這些清單中的數(shù)值。對于那些很少的沒有用它自己的清單數(shù)值命名的程序清單,它們都與文件名匹配,所以很容易就可以在下載的源代碼文件中找到它們。
勘誤表
盡管我們已經(jīng)盡了各種努力來保證文章或代碼中不出現(xiàn)錯(cuò)誤,但是錯(cuò)誤總是難免的,如果您在本書中找到了錯(cuò)誤,例如拼寫錯(cuò)誤或代碼錯(cuò)誤,請告訴我們,我們將非常感激。通過勘誤表,可以讓其他讀者避免受挫,當(dāng)然,這還有助于提供更高質(zhì)量的信息。
要在網(wǎng)站上找到本書英文版的勘誤表,可以登錄http://www.wrox.com,通過Search工具或書名列表查找本書,然后在本書的細(xì)目頁面上,單擊Book Errata鏈接。在這個(gè)頁面上可以查看到Wrox編輯已提交和粘貼的所有勘誤項(xiàng)。完整的圖書列表還包括每本書的勘誤表,網(wǎng)址是www.wrox.com/misc-pages/booklist.shtml。
如果您發(fā)現(xiàn)的錯(cuò)誤在我們的勘誤表里還沒有出現(xiàn)的話,請登錄www.wrox.com/contact/ techsupport.shtml并完成那里的表格,把您發(fā)現(xiàn)的錯(cuò)誤發(fā)送給我們。我們會(huì)檢查您的反饋信息,如果正確,我們將在本書的勘誤表頁面張貼該錯(cuò)誤消息,并在本書的后續(xù)版本加以修訂。
p2p. wrox.com
要與作者和同行討論,請加入p2p.wrox.com上的P2P論壇。這個(gè)論壇是一個(gè)基于Web的系統(tǒng),便于您張貼與Wrox圖書相關(guān)的消息和相關(guān)技術(shù),與其他讀者和技術(shù)用戶交流心得。該論壇提供了訂閱功能,當(dāng)論壇上有新的消息時(shí),它可以給您傳送感興趣的論題。Wrox作者、編輯和其他業(yè)界專家和讀者都會(huì)到這個(gè)論壇上來探討問題。
在http://p2p.wrox.com上,有許多不同的論壇,它們不僅有助于閱讀本書,還有助于開發(fā)自己的應(yīng)用程序。要加入論壇,可以遵循下面的步驟:
(1) 進(jìn)入p2p.wrox.com,單擊Register鏈接。
(2) 閱讀使用協(xié)議,并單擊Agree按鈕。
(3) 填寫加入該論壇所需要的信息和自己希望提供的其他可選信息,單擊Submit按鈕。
您會(huì)收到一封電子郵件,其中的信息描述了如何驗(yàn)證賬戶,完成加入過程。
加入論壇后,就可以張貼新消息,響應(yīng)其他用戶張貼的消息。可以隨時(shí)在Web上閱讀消息。如果要讓該網(wǎng)站給自己發(fā)送特定論壇中的消息,可以單擊論壇列表中該論壇名旁邊的Subscribe to this Forum圖標(biāo)。
要想了解更多的有關(guān)論壇軟件的工作情況,以及P2P和Wrox圖書的許多常見問題的解答,就一定要閱讀FAQ,只需在任意P2P頁面上單擊FAQ鏈接即可。
第Ⅰ部分 概述和安裝
第1章 安裝Node 3
1.1 在Windows上安裝Node 4
1.2 在MAC OS X上安裝Node 6
1.3 使用源代碼安裝Node 7
1.3.1 選擇Node的版本 7
1.3.2 下載Node源代碼 7
1.3.3 編譯Node 8
1.3.4 安裝Node 8
1.3.5 運(yùn)行Node 8
1.4 安裝和應(yīng)用Node包管理器 9
1.5 本章小結(jié) 14
第2章 Node簡介 15
2.1 事件驅(qū)動(dòng)編程風(fēng)格介紹 16
2.2 Node和JavaScript如何簡化異步應(yīng)用程序的編寫 17
第Ⅰ部分 概述和安裝
第1章 安裝Node 3
1.1 在Windows上安裝Node 4
1.2 在MAC OS X上安裝Node 6
1.3 使用源代碼安裝Node 7
1.3.1 選擇Node的版本 7
1.3.2 下載Node源代碼 7
1.3.3 編譯Node 8
1.3.4 安裝Node 8
1.3.5 運(yùn)行Node 8
1.4 安裝和應(yīng)用Node包管理器 9
1.5 本章小結(jié) 14
第2章 Node簡介 15
2.1 事件驅(qū)動(dòng)編程風(fēng)格介紹 16
2.2 Node和JavaScript如何簡化異步應(yīng)用程序的編寫 17
2.2.1 什么是閉包 17
2.2.2 閉包如何輔助異步編程 18
2.3 本章小結(jié) 19
第Ⅱ部分 Node核心API基礎(chǔ)
第3章 加載模塊 23
3.1 理解Node如何加載模塊 24
3.2 導(dǎo)出模塊 24
3.3 加載模塊 25
3.3.1 加載核心模塊 25
3.3.2 加載文件模塊 26
3.3.3 加載文件夾模塊 26
3.3.4 從node_modules文件夾加載 26
3.3.5 緩存模塊 27
3.4 本章小結(jié) 28
第4章 應(yīng)用緩沖區(qū)處理、編碼和解碼二進(jìn)制數(shù)據(jù) 29
4.1 創(chuàng)建緩沖區(qū) 30
4.2 在緩沖區(qū)中獲取和設(shè)置數(shù)據(jù) 30
4.3 切分緩沖區(qū) 31
4.4 復(fù)制緩沖區(qū) 32
4.5 緩沖區(qū)解碼 32
4.6 本章小結(jié) 33
第5章 使用事件發(fā)射器模式簡化事件綁定 35
5.1 理解標(biāo)準(zhǔn)回調(diào)模式 35
5.2 理解事件發(fā)射器模式 36
5.3 理解事件類型 37
5.4 應(yīng)用事件發(fā)生器API 38
5.4.1 使用.addListener( )或.on( )綁定回調(diào)函數(shù) 38
5.4.2 綁定多個(gè)事件監(jiān)聽器 39
5.4.3 使用.removeListener( )從事件發(fā)射器中刪除一個(gè)事件監(jiān)聽器 40
5.4.4 使用.once()使回調(diào)函數(shù)最多執(zhí)行一次 40
5.4.5 使用.removeAllListeners()從事件發(fā)射器刪除所有事件監(jiān)聽器 41
5.5 創(chuàng)建事件發(fā)射器 41
5.5.1 從Node事件發(fā)射器繼承 41
5.5.2 發(fā)射事件 42
5.6 本章小結(jié) 42
第6章 使用定時(shí)器制定函數(shù)執(zhí)行計(jì)劃 45
6.1 使用setTimeout推遲函數(shù)執(zhí)行 46
6.2 使用clearTimeout取消函數(shù)執(zhí)行 46
6.3 制定和取消函數(shù)的重復(fù)執(zhí)行計(jì)劃 47
6.4 使用process.nextTick將函數(shù)執(zhí)行推遲到下一輪事件循環(huán) 47
6.5 阻塞事件循環(huán) 48
6.6 退出事件循環(huán) 49
6.7 使用setTimeout代替setInterval強(qiáng)制函數(shù)串行執(zhí)行 49
6.8 本章小結(jié) 50
第Ⅲ部分 文件、進(jìn)程、流和網(wǎng)絡(luò)
第7章 查詢和讀寫文件 53
7.1 處理文件路徑 54
7.1.1 規(guī)范化路徑 54
7.1.2 連接路徑 54
7.1.3 解析路徑 55
7.1.4 查找兩個(gè)絕對路徑之間的相對路徑 55
7.1.5 提取路徑的組成部分 55
7.1.6 確定路徑是否存在 56
7.2 fs模塊簡介 57
7.3 打開文件 58
7.4 讀取文件 58
7.4.1 寫入文件 59
7.4.2 關(guān)閉文件 60
7.5 本章小結(jié) 62
第8章 創(chuàng)建和控制外部進(jìn)程 63
8.1 執(zhí)行外部命令 63
8.2 生成子進(jìn)程 68
8.2.1 創(chuàng)建子進(jìn)程 68
8.2.2 監(jiān)聽子進(jìn)程的輸出數(shù)據(jù) 69
8.2.3 向子進(jìn)程發(fā)送數(shù)據(jù) 69
8.2.4 當(dāng)子進(jìn)程退出時(shí)獲得通知 71
8.3 向進(jìn)程發(fā)送信號并終止進(jìn)程 72
8.4 本章小結(jié) 73
第9章 讀寫數(shù)據(jù)流 75
9.1 使用可讀流 76
9.1.1 等待數(shù)據(jù) 76
9.1.2 暫停與恢復(fù)流 76
9.1.3 了解流何時(shí)終止 77
9.2 使用可寫流 77
9.2.1 將數(shù)據(jù)寫入流 77
9.2.2 等待流被清空 78
9.3 考慮幾個(gè)流的例子 78
9.3.1 創(chuàng)建文件系統(tǒng)流 78
9.3.2 理解網(wǎng)絡(luò)流 80
9.4 避免慢客戶端問題以及挽救服務(wù)器 80
9.4.1 理解慢客戶端問題 80
9.4.2 避免慢客戶端問題 81
9.4.3 應(yīng)用stream.pipe()避免慢客戶端問題與使用pipe()集成可讀流和可寫流 81
9.5 本章小結(jié) 82
第10章 構(gòu)建TCP服務(wù)器 83
10.1 創(chuàng)建TCP服務(wù)器 83
10.1.1 應(yīng)用套接字對象 85
10.1.2 理解空閑套接字 86
10.1.3 設(shè)置保持運(yùn)行 87
10.1.4 應(yīng)用延時(shí)或非延時(shí) 87
10.1.5 監(jiān)聽連接 88
10.1.6 關(guān)閉服務(wù)器 88
10.1.7 處理錯(cuò)誤 88
10.2 構(gòu)建一個(gè)簡單的TCP聊天服務(wù)器 89
10.2.1 接受連接 89
10.2.2 從連接中讀取數(shù)據(jù) 89
10.2.3 聚合所有客戶端 90
10.2.4 廣播數(shù)據(jù) 91
10.2.5 刪除被關(guān)閉的連接 91
10.2.6 使用TCP聊天服務(wù)器 92
10.3 本章小結(jié) 93
第11章 構(gòu)建HTTP服務(wù)器 95
11.1 理解http.ServerRequest對象 96
11.2 理解http.ServerResponse對象 98
11.2.1 寫入響應(yīng)頭 98
11.2.2 修改或設(shè)置響應(yīng)頭 98
11.2.3 刪除響應(yīng)頭 99
11.2.4 寫入一塊響應(yīng)主體 99
11.3 以流的形式傳送HTTP分塊響應(yīng) 99
11.3.1 傳送文件 99
11.3.2 傳送其他進(jìn)程的輸出 100
11.4 關(guān)閉服務(wù)器 100
11.5 示例1:構(gòu)建提交靜態(tài)文件的服務(wù)器 101
11.6 示例2:使用HTTP分塊響應(yīng)和定時(shí)器 102
11.7 本章小結(jié) 102
第12章 構(gòu)建TCP客戶端 103
12.1 連接服務(wù)器 104
12.2 發(fā)送和接收數(shù)據(jù) 104
12.3 終止連接 105
12.4 處理錯(cuò)誤 106
12.5 創(chuàng)建命令行TCP客戶端的示例 106
12.5.1 連接服務(wù)器 107
12.5.2 向服務(wù)器發(fā)送命令行 107
12.5.3 打印服務(wù)器消息 107
12.5.4 在連接終止時(shí)重新連接 108
12.5.5 關(guān)閉連接 110
12.5.6 前述內(nèi)容綜合 111
12.6 本章小結(jié) 112
第13章 創(chuàng)建HTTP請求 113
13.1 創(chuàng)建GET請求 113
13.2 使用其他HTTP動(dòng)詞 114
13.2.1 查看響應(yīng)對象 115
13.2.2 獲取響應(yīng)主體 116
13.2.3 以流的方式傳送響應(yīng)主體 116
13.3 使用HTTP.Agent維護(hù)套接字池 116
13.4 應(yīng)用第三方請求模塊簡化HTTP請求 118
13.4.1 安裝和應(yīng)用request模塊 118
13.4.2 創(chuàng)建測試服務(wù)器 119
13.4.3 跟隨重定向 121
13.4.4 設(shè)置請求選項(xiàng) 122
13.4.5 對請求體進(jìn)行編碼 125
13.4.6 流式傳送 126
13.4.7 使用Cookie Jar 127
13.5 本章小結(jié) 127
第14章 使用用戶數(shù)據(jù)報(bào) 129
14.1 理解用戶數(shù)據(jù)報(bào) 129
14.2 理解用戶數(shù)據(jù)報(bào)的使用 130
14.3 構(gòu)建數(shù)據(jù)報(bào)服務(wù)器 130
14.3.1 監(jiān)聽消息 130
14.3.2 測試服務(wù)器 131
14.3.3 查看附加的消息信息 132
14.4 創(chuàng)建簡單的數(shù)據(jù)報(bào)回送服務(wù)器 132
14.4.1 等待消息 132
14.4.2 向發(fā)送端發(fā)回消息 132
14.4.3 前述內(nèi)容綜合 133
14.5 構(gòu)建數(shù)據(jù)報(bào)客戶端 133
14.5.1 創(chuàng)建客戶端 134
14.5.2 發(fā)送消息 134
14.5.3 關(guān)閉套接字 134
14.6 創(chuàng)建一個(gè)簡單的數(shù)據(jù)報(bào)命令行客戶端 134
14.6.1 讀取命令行 135
14.6.2 向服務(wù)器發(fā)送數(shù)據(jù) 135
14.6.3 從服務(wù)器接收數(shù)據(jù) 135
14.6.4 前述內(nèi)容綜合 136
14.7 理解和使用數(shù)據(jù)報(bào)多播 136
14.7.1 接收多播消息 137
14.7.2 發(fā)送多播消息 137
14.7.3 理解數(shù)據(jù)報(bào)最大容量 138
14.8 本章小結(jié) 138
第15章 用TLS/SSL保證服務(wù)器的安全性 139
15.1 理解私鑰和公鑰 139
15.1.1 產(chǎn)生私鑰 140
15.1.2 產(chǎn)生公鑰 140
15.2 構(gòu)建TLS服務(wù)器 140
15.2.1 初始化服務(wù)器 141
15.2.2 監(jiān)聽連接 141
15.2.3 從客戶端讀取數(shù)據(jù) 142
15.2.4 向客戶端發(fā)送數(shù)據(jù) 142
15.2.5 終止連接 142
15.3 構(gòu)建TLS客戶端 142
15.3.1 初始化客戶端 143
15.3.2 連接服務(wù)器 143
15.3.3 驗(yàn)證服務(wù)器證書 143
15.3.4 向服務(wù)器發(fā)送數(shù)據(jù) 144
15.3.5 從服務(wù)器讀取數(shù)據(jù) 144
15.3.6 終止連接 144
15.4 創(chuàng)建幾個(gè)示例 144
15.4.1 創(chuàng)建TLS聊天服務(wù)器 145
15.4.2 創(chuàng)建TLS命令行聊天客戶端 146
15.4.3 驗(yàn)證客戶端證書 147
15.5 本章小結(jié) 148
第16章 用HTTPS保證HTTP服務(wù)器的安全性 149
16.1 構(gòu)建安全的HTTP服務(wù)器 149
16.1.1 設(shè)置服務(wù)器選項(xiàng) 150
16.1.2 監(jiān)聽連接 150
16.1.3 驗(yàn)證HTTPS客戶端證書 151
16.2 創(chuàng)建HTTPS客戶端 152
16.2.1 初始化客戶端 152
16.2.2 創(chuàng)建請求 152
16.2.3 驗(yàn)證HTTPS服務(wù)器證書 153
16.3 本章小結(jié) 154
第Ⅳ部分 構(gòu)建與調(diào)試模塊及應(yīng)用程序
第17章 測試模塊及應(yīng)用程序 157
17.1 應(yīng)用測試運(yùn)行工具 157
17.1.1 編寫測試 158
17.1.2 運(yùn)行測試 159
17.2 使用斷言測試模塊 159
17.2.1 使用斷言模塊 159
17.2.2 使用Node-Tap中的內(nèi)置斷言函數(shù) 161
17.3 測試異步模塊 163
17.4 本章小結(jié) 166
第18章 調(diào)試模塊及應(yīng)用程序 167
18.1 使用console.log 167
18.2 使用Node內(nèi)置調(diào)試器 169
18.3 使用Node檢查器 173
18.4 本章小結(jié) 175
第19章 控制回調(diào)流程 177
19.1 理解飛去來器效應(yīng) 177
19.2 通過聲明函數(shù)避免飛去來器效應(yīng) 179
19.3 使用ASYNC流程控制庫 183
19.3.1 串行執(zhí)行 184
19.3.2 并行執(zhí)行 185
19.3.3 連續(xù)傳遞 186
19.3.4 排隊(duì) 187
19.3.5 迭代 189
19.3.6 映射 190
19.3.7 規(guī)約 191
19.3.8 過濾 192
19.3.9 檢測 193
19.4 本章小結(jié) 194
第Ⅴ部分 構(gòu)建Web應(yīng)用程序
第20章 構(gòu)建和使用HTTP中間件 197
20.1 理解Connect HTTP中間件框架 198
20.2 構(gòu)建自定義HTTP中間件 198
20.2.1 創(chuàng)建異步中間件 199
20.2.2 在中間件內(nèi)部注冊回調(diào)函數(shù) 201
20.2.3 在中間件內(nèi)處理錯(cuò)誤 202
20.3 使用捆綁在Connect中的HTTP中間件 206
20.3.1 記錄請求 206
20.3.2 處理錯(cuò)誤 208
20.3.3 提交靜態(tài)文件 209
20.3.4 解析查詢字符串 210
20.3.5 解析請求主體 211
20.3.6 解析Cookies 212
20.3.7 使用會(huì)話 213
20.3.8 其他可用的中間件 216
20.4 本章小結(jié) 216
第21章 用Express.js創(chuàng)建Web應(yīng)用程序 217
21.1 初始化Express.js應(yīng)用程序 218
21.2 在應(yīng)用程序中設(shè)置中間件 220
21.3 路由請求 222
21.3.1 處理路由 222
21.3.2 使用會(huì)話 229
21.3.3 使用路由中間件 234
21.4 本章小結(jié) 238
第22章 使用Socket.IO創(chuàng)建通用的實(shí)時(shí)Web應(yīng)用程序 241
22.1 理解WebSockets如何工作 242
22.2 使用Socket.IO創(chuàng)建WebSocket應(yīng)用程序 243
22.2.1 在服務(wù)器上安裝和運(yùn)行Socket.IO 243
22.2.2 使用Socket.IO創(chuàng)建實(shí)時(shí)網(wǎng)絡(luò)聊天應(yīng)用程序 245
22.2.3 擴(kuò)展聊天應(yīng)用程序 250
22.2.4 檢測連接斷開 253
22.2.5 將用戶分隔到聊天室中 255
22.2.6 使用名稱空間 259
22.2.7 使用Redis分布運(yùn)行服務(wù)器端應(yīng)用程序 260
22.3 本章小結(jié) 263
第Ⅵ部分 連接數(shù)據(jù)庫
第23章 使用node-mysql連接MySQL數(shù)據(jù)庫 267
23.1 應(yīng)用庫與MySQL數(shù)據(jù)庫進(jìn)行連接和通信 267
23.2 向數(shù)據(jù)庫添加數(shù)據(jù)時(shí)請記住安全性 269
23.3 高效讀取數(shù)據(jù) 272
23.4 本章小結(jié) 276
第24章 使用Nano連接CouchDB數(shù)據(jù)庫 277
24.1 安裝Nano 278
24.2 連接和創(chuàng)建數(shù)據(jù)庫 281
24.3 存儲文檔 285
24.4 創(chuàng)建和使用CouchDB視圖 286
24.5 將文件附加到CouchDB文檔上 299
24.6 本章小結(jié) 312
第25章 使用Mongoose連接MongoDB 數(shù)據(jù)庫 313
25.1 安裝Mongoose 315
25.2 理解Mongoose如何使用模型封裝對數(shù)據(jù)庫的訪問 315
25.3 連接MongoDB數(shù)據(jù)庫 316
25.4 定義模式 316
25.5 定義模型 316
25.5.1 使用驗(yàn)證器 326
25.5.2 使用修改器 332
25.5.3 使用取值器 333
25.5.4 使用虛擬屬性 334
25.5.5 使用默認(rèn)值 340
25.5.6 定義索引 341
25.5.7 使用DB Refs引用其他文檔 343
25.5.8 定義實(shí)例方法 349
25.5.9 定義靜態(tài)方法 350
25.6 本章小結(jié) 351