內容簡介
《Node.js項目實踐:構建可擴展的Web套用》用專業的講解方式,帶領讀者從“
Hello World”示例開始,一步步將其構建成有實際用途的
Node.js套用。《Node.js項目實踐:構建可擴展的Web套用》涉及許多組件的使用,比如安全、部署上線、組織
代碼、
資料庫驅動和模板
引擎等,從中可使讀者接觸到很多經過歷年實踐所得出的廣受歡迎的模組庫,它們可以大大提高開發人員的代碼質量和開發效率。
作者簡介
Azat Mardan 在網際網路、移動、軟體開發方面有十多年的工作經驗。他擁有信息學學士以及信息系統碩士學位,並且掌握和實踐經驗一樣豐富的學術知識。
之前,Azat 曾在 Storify.com(2013 被收購)、美國國家生物技術信息中心、聯邦存款保險公司、洛克希德馬丁以及其他公司任高級軟體工程師。他在 Marakana 開源社區(2013 被收購)、pariSOMA、General Assembly San Francisco 以及Hack Reactor 上教編程,獲得一致好評。Azat 會利用業餘時間在他的部落格 webapplog.com 上寫技術文章。他還是其他 4 本 JavaScript 和 Node.js 圖書的作者,包括亞馬遜上客戶端伺服器類的暢銷書:Rapid Prototyping with JS: Agile JavaScript Development。
Azat 是開源 Node.js 項目:ExpressWorks、mongoui、HackHall 和 NodeFramework.com的創建者,同時,也是 Express、OAuth、jade-browser 以及其他 NPM 模組的貢獻者。
內容提要
《Node.js項目實踐:構建可擴展的Web套用》用專業的講解方式,帶領讀者從“Hello World”示例開始,一步步將其構建成有實際用途的Node.js套用。《Node.js項目實踐:構建可擴展的Web套用》涉及許多組件的使用,比如安全、部署上線、組織代碼、資料庫驅動和模板引擎等,從中可使讀者接觸到很多經過歷年實踐所得出的廣受歡迎的模組庫,它們可以大大提高開發人員的代碼質量和開發效率。
目錄
第1 章 安裝Node.js 及相關要點 .............. 1
安裝Node.js 和NPM ................................. 1
一鍵安裝 ................................................ 2
通過HomeBrew 或MacPorts 安裝 ........ 3
通過tar 檔案安裝 .................................. 4
無須sudo 授權進行安裝 ........................ 4
通過Git Repo 進行安裝 ......................... 5
通過Nave 進行多版本安裝 ................... 5
通過NVM 進行多版本安裝................... 6
其他的多版本系統 .................................. 6
檢查安裝 ................................................ 7
Node.js 控制台(REPL) ....................... 7
載入Node.js 腳本....................................... 9
Node.js 的基礎和語法 ............................... 9
弱類型 .................................................... 9
Buffer——Node.js 特殊數據類型..........10
對象字面量 ...........................................10
函式 ....................................................... 11
數組 .......................................................12
原型特性 ...............................................12
編碼規範 ...............................................13
Node.js 的全局變數和保留字 ................14
__dirname 與process.cwd 的對比 .........17
瀏覽器API 輸助工具 ............................17
Node.js 的核心模組 ...............................18
便捷的Node.js 工具 ..............................20
在Node.js 中讀寫檔案 ..........................20
Node.js 中的數據流 ...............................21
使用NPM 安裝Node.js 模組 ................21
最佳化Node.js 中的回調函式...................22
使用Node.js 的HTTP 模組來創建一個簡單伺服器 ...................23
調試Node.js 程式......................................24
核心Node.js 調試 ..................................24
使用Node Inspector 來調試 ..................25
Node.js 集成開發環境和代碼編輯器 ...28
監聽檔案變化 .............................................30
小結 ...............................................................31
第2 章 使用Express.js 4 創建Node.js 的Web 應用程式 ...................32
什麼是Express.js .......................................32
Express.js 是如何工作的 ..........................35
Express.js 的安裝 .......................................36
Express.js 的版本 ..................................36
Express.js 生成器 ..................................37
本地Express.js ......................................38
Express.js 腳手架 .......................................40
Express.js 命令行界面 ...........................41
Express.js 中的路由 ...............................43
Express.js 的核心——中間件 ................44
一個Express.js 套用的配置...................45
Jade 就是Express.js/Node.js 的Haml ...45
腳手架總結 ...........................................45
部落格項目概述 .............................................46
提交數據 ...............................................47
Express.js 4 中的Hello World 例子 .......48
創建資料夾 ...........................................49
NPM 初始化和package.json .................50
依賴聲明:npm install ...........................50
app.js 檔案 .............................................51
Jade 模板 ...............................................55
運行Hello World 套用 ...........................56
小結 ...............................................................56
第3 章 Node.js 基於Mocha 的測試驅動開發和行為驅動開發 ......................57
安裝與理解Mocha ...................................58
理解Mocha 的hook 機制 ......................60
用assert 進行TDD ...................................61
斷言庫Chai ...........................................63
用Expect.js 進行BDD .............................64
Expect.js 的語法 ....................................65
項目:為部落格開發一個BDD 測試 ......65
將配置參數寫入Makefile .....................68
小結 ...............................................................69
第4 章 模板引擎:Jade 和Handlebars 70
Jade 的語法和特性 ...................................70
標籤 .......................................................71
變數/數據 ..............................................71
屬性 .......................................................72
字面量 ...................................................73
文本 .......................................................73
Script 和 Style 塊 ..................................74
JavaScript 代碼 ......................................74
注釋 .......................................................75
if 語句 ....................................................75
each 語句 ...............................................75
過濾器 ...................................................76
讀取變數 ...............................................76
case ........................................................76
函式mixin .............................................77
include ....................................................78
extend .....................................................78
單獨使用Jade .............................................79
Handlebars 的語法 ....................................83
變數 .......................................................83
each 語句 ...............................................83
非轉義輸出 ...........................................84
if 語句 ....................................................85
unless .....................................................85
with ........................................................86
注釋 .......................................................87
自定義 Helpers .....................................87
Include ...................................................88
單獨使用Handlebars .................................88
Express.js 4 中Jade 和Handlebars 的用法 ............................................91
Jade 和 Express.js .................................92
Handlebars 和Express.js ........................92
項目:給部落格添加Jade 模板 .................93
layout.jade ..............................................94
index.jade ...............................................96
article.jade ..............................................97
login.jade ................................................98
post.jade .................................................99
admin.jade ............................................ 100
小結 ............................................................. 101
第5 章 MongoDB、Mongoskin 特性 .... 102
簡單且正確地安裝MongoDB .............. 103
如何運行Mongo 服務 ............................ 104
用控制台操作Mongo ............................. 105
MongoDB shell 命令介紹 ...................... 106
Node.js 版原生MongoDB 驅動示例 .. 107
Mongoskin 的主要方法介紹 ................. 111
項目:用Mongoskin 把部落格數據存儲到MongoDB ............................ 112
項目:在MongoDB 中添加seed 數據 ......................................... 112
項目:Mocha 測試 ............................... 113
項目:添加持久連線 ........................... 115
運行App .............................................. 126
小結 ............................................................. 127
第6 章 在Node.js 套用中使用session 和OAuth 進行用戶認證和授權 ............... 128
使用Express.js 中間件許可權管理 ......... 128
基於token 的用戶認證 ........................... 129
基於session 的用戶認證 ........................ 130
項目實踐:為部落格增加信箱和密碼登錄功能 .......................................... 132
session 中間件 ..................................... 132
部落格中的許可權管理 ............................... 133
部落格中的用戶授權 ............................... 136
運行套用 ............................................. 138
Node.js OAuth ........................................... 138
使用Node.js OAuth 實現Twitter OAuth 2.0 的示例 ................................ 139
Everyauth ............................................. 140
項目實踐:為部落格增加Twitter OAuth 1.0 第三方登錄(使用Everyauth 實現) .......... 141
添加“使用Twitter 賬戶登錄”連結 .. 142
配置EveryauthTwitter 模組 ................. 142
小結 ............................................................. 148
第7 章 使用ORM 類庫Mongoose 提升你的Node.js 數據 ......................... 149
安裝Mongoose ......................................... 150
用獨立的Mongoose 腳本建立資料庫連線 .................................. 150
Mongoose 的原型 .................................... 152
使用鉤子保持代碼的邏輯清晰 ............ 154
自定義靜態方法和實例方法 ................ 155
Mongoose 模型 ....................................... 155
使用population 建立關係和連線 ........ 158
嵌套的文檔 ............................................... 160
虛擬欄位 .................................................... 161
修改原型的行為 ...................................... 162
Express.js + Mongoose =真正的MVC ..................................... 164
小結 ................................. 175
第8 章 使用Express.js 和Hapi 構建Node.js REST API 服務 ....................... 176
RESTful API 基礎 ................................... 177
項目依賴 .................................................... 179
使用Mocha 和Superagent 進行測試 . 180
使用Express 和Mongoskin 實現REST API 伺服器 ...................................... 185
重構:使用Hapi 搭建REST API 伺服器 .............................................. 192
小結 ............................................................. 199
第9 章 WebSocket、Socket.IO 和DerbyJS 的實時應用程式 .................... 200
什麼是WebSocket ................................... 200
用ws 模組的例子介紹本地WebSocket 和Node.js .............................. 201
瀏覽器WebSocket 的實現 ................... 201
用ws 模組實現Node.js 伺服器 .......... 202
Socket.IO 和Express.js 的例子 ............ 204
用DerbyJS、Express.js 和MongoDB 搭建一個線上協作的代碼編輯器例子 ........ 209
項目依賴和package.json ..................... 210
伺服器端代碼 ...................................... 211
DerbyJS 應用程式 ................................ 213
DerbyJS 視圖 ....................................... 215
編輯器Tryout ...................................... 217
小結 ............................................................. 218
第10 章 為Node.js 套用上線做準備 ..... 219
環境變數 .................................................... 219
生產環境下的Express.js ........................ 220
生產環境下的Socket.IO ........................ 222
錯誤處理 ................................ 223
錯誤處理工具Node.js domains ............ 225
使用Cluster 處理多執行緒 ........................ 229
使用Cluster2 處理多執行緒 ..................... 232
事件日誌和監控 ...................................... 233
監控 ..................................................... 233
生產環境下的REPL ............................ 235
Winston ................................................ 236
使用Papertrail 套用來管理日誌 ......... 237
使用Grunt 處理任務 ............................... 237
使用Git 來做版本控制和發布代碼 ... 241
安裝Git ............................................... 242
生成SSH 密鑰 .................................... 242
創建本地Git 倉庫................................ 245
將本地倉庫推送到GitHub .................. 245
在雲上使用TravisCI 運行測試用例 .. 246
TravisCI 配置 ...................................... 247
小結 ............................................................. 248
第11 章 部署Node.js 套用 ....................... 249
部署到Heroku .......................................... 249
部署到Amazon 網路服務 ..................... 255
使用forever、Upstart 和init.d 保持Node.js 持續運行 ................ 259
forever .................................................. 259
Upstart .................................................. 260
init.d ..................................................... 262
儘可能使用Nginx 提供靜態資源 ....... 264
使用Varnish 快取 .................................... 266
小結 ............................................................. 268
第12 章 Node.js 模組發布和參與開源 . 269
推薦的目錄結構 ...................................... 270
所需模式 .................................................... 270
package.json............................................... 273
發布到NPM ............................................. 274
鎖定版本 .................................................... 274
小結 ............................................................. 275
結束語 ......................................................... 275
進階閱讀 .................................................... 276
勘誤和聯繫方式 ...................................... 276