本書系統(tǒng)地講解了使用Express開發(fā)動態(tài)Web應(yīng)用的流程和步驟。作者不僅講授了開發(fā)公共站點(diǎn)及REST API的基礎(chǔ)知識,還講解了構(gòu)建單頁、多頁及混合Web應(yīng)用的規(guī)劃方式及最佳實(shí)踐。為了適應(yīng)中間件及相關(guān)工具在過去幾年里的變化,第2版更側(cè)重于Express作為提供API的后端服務(wù)器,并新增了單頁應(yīng)用的示例。
本書適合希望使用JavaScript、Node、Express構(gòu)建Web應(yīng)用的開發(fā)人員閱讀。
1、全書代碼資源免費(fèi)贈送并且可以下載
2、美國VMS技術(shù)總監(jiān)傾力打造的高效開發(fā)web的Javascript框架指導(dǎo)書
3、借助Express框架打造動態(tài)高性能Web應(yīng)用
4、互聯(lián)網(wǎng)大廠前端開發(fā)同學(xué)的必備技能書
伊桑.布朗(Ethan Brown),美國VMS公司技術(shù)總監(jiān),負(fù)責(zé)公司旗艦產(chǎn)品的架構(gòu)和實(shí)現(xiàn)。他擁有20多年的編程經(jīng)驗(yàn),在Node、Express、JavaScript、React的實(shí)踐方面擁有獨(dú)到見解。
前言 xvii
第 1 章 Express是什么 1
1.1 JavaScript的革命 1
1.2 Express簡介 2
1.3 服務(wù)器端應(yīng)用和客戶端應(yīng)用 4
1.4 Express簡史 4
1.5 Node:另一種Web服務(wù)器 5
1.6 Node生態(tài)系統(tǒng) 6
1.7 開源協(xié)議 7
1.8 小結(jié) 8
第 2 章 Node的世界 9
2.1 獲取Node 9
2.2 使用終端 10
2.3 編輯器 11
2.4 npm 11
2.5 用Node做一個簡單的Web服務(wù)器 12
2.5.1 Hello world 13
2.5.2 事件驅(qū)動編程 14
2.5.3 路由 14
2.5.4 提供靜態(tài)資源 15
2.6 進(jìn)入Express 17
第 3 章 Express的方式 18
3.1 腳手架 18
3.2 草地鷚旅游網(wǎng)站 19
3.3 初始工作 19
3.4 視圖與布局 22
3.5 靜態(tài)文件與視圖 25
3.6 視圖中的動態(tài)內(nèi)容 26
3.7 小結(jié) 26
第 4 章 項(xiàng)目整頓 27
4.1 項(xiàng)目文件與目錄結(jié)構(gòu) 27
4.2 最佳實(shí)踐 28
4.3 版本控制 28
4.4 在本書學(xué)習(xí)中如何使用Git 29
4.4.1 親手錄入 29
4.4.2 使用官方版本庫 30
4.5 npm包 31
4.6 項(xiàng)目元數(shù)據(jù) 32
4.7 Node模塊 32
4.8 小結(jié) 34
第 5 章 質(zhì)量保證 35
5.1 QA計(jì)劃 36
5.2 QA:是否值得 37
5.3 邏輯與表示 38
5.4 測試類型 38
5.5 QA技術(shù) 38
5.6 安裝和配置Jest 39
5.7 單元測試 40
5.7.1 模擬 40
5.7.2 為可測試性而重構(gòu)應(yīng)用 40
5.7.3 寫第 一個測試 41
5.7.4 測試維護(hù) 43
5.7.5 代碼覆蓋率 43
5.8 集成測試 44
5.9 Linting 47
5.10 持續(xù)集成 50
5.11 小結(jié) 51
第 6 章 request和response對象 52
6.1 URL的各個組成部分 52
6.2 HTTP請求方法 53
6.3 請求頭 54
6.4 響應(yīng)頭 54
6.5 互聯(lián)網(wǎng)媒體類型 55
6.6 請求的Body 55
6.7 request對象 55
6.8 response對象 57
6.9 深入源代碼 59
6.10 按功能歸納 59
6.10.1 渲染內(nèi)容 60
6.10.2 處理表單 61
6.10.3 API服務(wù) 62
6.11 小結(jié) 63
第 7 章 視圖模板——使用Handlebars 64
7.1 何時使用模板 65
7.2 選擇模板引擎 66
7.3 Pug:另辟蹊徑 66
7.4 Handlebars基礎(chǔ) 67
7.4.1 注釋 69
7.4.2 代碼塊 69
7.4.3 服務(wù)器端模板 70
7.4.4 視圖和布局 71
7.4.5 在Express中使用(或不使用)布局 73
7.4.6 sections 73
7.4.7 partial模板 74
7.4.8 完善模板 76
7.5 小結(jié) 77
第 8 章 表單處理 78
8.1 把客戶端數(shù)據(jù)發(fā)送到服務(wù)器 78
8.2 HTML表單 78
8.3 表單的編碼 79
8.4 處理表單的不同做法 80
8.5 使用Express處理表單 81
8.6 使用fetch發(fā)送表單數(shù)據(jù) 83
8.7 文件上傳 85
8.8 提升文件上傳的UI 88
8.9 小結(jié) 88
第 9 章 Cookie和Session 89
9.1 提取敏感信息 91
9.2 Express中的Cookie 91
9.3 查看Cookie 93
9.4 Session 93
9.4.1 內(nèi)存存儲 94
9.4.2 使用Session 95
9.5 使用Session實(shí)現(xiàn)flash消息 95
9.6 Session的用途 97
9.7 小結(jié) 97
第 10 章 中間件 98
10.1 基本原理 99
10.2 中間件示例 99
10.3 常用中間件 102
10.4 第三方中間件 104
10.5 小結(jié) 104
第 11 章 發(fā)送郵件 105
11.1 SMTP、MSA和MTA 105
11.2 接收郵件 106
11.3 郵件頭 106
11.4 郵件格式 106
11.5 HTML郵件 107
11.6 Nodemailer 107
11.6.1 發(fā)送郵件 108
11.6.2 發(fā)送給多個收件人 109
11.7 群發(fā)郵件更好的選擇 110
11.8 發(fā)送HTML郵件 110
11.8.1 HTML郵件中的圖片 111
11.8.2 使用視圖來發(fā)送HTML郵件 111
11.8.3 封裝郵件功能 113
11.9 小結(jié) 114
第 12 章 考慮生產(chǎn)環(huán)境中的問題 115
12.1 運(yùn)行環(huán)境 115
12.2 特定環(huán)境的配置 116
12.3 運(yùn)行Node進(jìn)程 117
12.4 網(wǎng)站的擴(kuò)展 118
12.4.1 使用應(yīng)用集群實(shí)現(xiàn)水平擴(kuò)展 119
12.4.2 處理未捕獲的異常 121
12.4.3 使用多臺服務(wù)器完成水平擴(kuò)展 123
12.5 監(jiān)控網(wǎng)站的運(yùn)行 123
12.6 壓力測試 124
12.7 小結(jié) 125
第 13 章 持久化 126
13.1 文件系統(tǒng)持久化 126
13.2 云持久化 128
13.3 數(shù)據(jù)庫持久化 129
13.3.1 關(guān)于性能的提醒 129
13.3.2 數(shù)據(jù)庫層抽象 130
13.3.3 設(shè)置MongoDB 131
13.3.4 Mongoose 132
13.3.5 使用Mongoose連接數(shù)據(jù)庫 132
13.3.6 創(chuàng)建模式和模型 133
13.3.7 使用種子數(shù)據(jù)初始化 134
13.3.8 獲取數(shù)據(jù) 136
13.3.9 更新數(shù)據(jù) 138
13.3.10 PostgreSQL 139
13.3.11 新增數(shù)據(jù) 145
13.4 使用數(shù)據(jù)庫存儲Session 146
13.5 小結(jié) 148
第 14 章 路由 149
14.1 路由與SEO 151
14.2 子域名 151
14.3 路由處理函數(shù)也是中間件 152
14.4 路由路徑和正則表達(dá)式 154
14.5 路由參數(shù) 154
14.6 組織路由 155
14.7 在模塊中聲明路由 156
14.8 合乎邏輯地分組路由 157
14.9 自動化渲染視圖 158
14.10 小結(jié) 159
第 15 章 REST API和JSON 160
15.1 JSON和XML 161
15.2 我們的API 161
15.3 API錯誤報(bào)告 162
15.4 跨域資源共享 163
15.5 測試 164
15.6 使用Express提供API 166
15.7 小結(jié) 167
第 16 章 單頁應(yīng)用 168
16.1 Web應(yīng)用開發(fā)簡史 168
16.2 SPA技術(shù)選擇 171
16.3 創(chuàng)建React應(yīng)用 172
16.4 React基本概念 172
16.4.1 主頁 174
16.4.2 路由 176
16.4.3 度假產(chǎn)品頁——可視化設(shè)計(jì) 178
16.4.4 度假產(chǎn)品頁——跟服務(wù)器端集成 179
16.4.5 向服務(wù)器發(fā)送信息 181
16.4.6 狀態(tài)管理 184
16.4.7 部署選擇 185
16.5 小結(jié) 185
第 17 章 靜態(tài)內(nèi)容 187
17.1 性能上的考量 188
17.2 內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN) 189
17.3 為CDN而設(shè)計(jì) 189
17.3.1 服務(wù)器端渲染的網(wǎng)站 190
17.3.2 單頁應(yīng)用 190
17.4 緩存靜態(tài)資源 191
17.5 變更靜態(tài)內(nèi)容 192
17.6 小結(jié) 193
第 18 章 安全 194
18.1 HTTPS 194
18.1.1 生成自己的證書 195
18.1.2 使用免費(fèi)的證書中心 196
18.1.3 購買證書 196
18.1.4 為Express應(yīng)用啟用HTTPS 198
18.1.5 有關(guān)端口的說明 199
18.1.6 HTTPS與代理 200
18.2 跨站請求偽造 201
18.3 認(rèn)證 202
18.3.1 認(rèn)證與授權(quán) 202
18.3.2 使用密碼認(rèn)證的問題 203
18.3.3 第三方認(rèn)證 203
18.3.4 在數(shù)據(jù)庫里存儲用戶信息 204
18.3.5 認(rèn)證與注冊及用戶體驗(yàn) 205
18.3.6 Passport 205
18.3.7 基于角色的授權(quán) 214
18.3.8 增加認(rèn)證提供者 215
18.4 小結(jié) 216
第 19 章 集成第三方API 217
19.1 社交媒體 217
19.1.1 社交媒體插件與網(wǎng)站性能 217
19.1.2 搜索推文 218
19.1.3 展現(xiàn)推文 221
19.2 地理編碼 223
19.2.1 使用谷歌生成地理編碼 223
19.2.2 為你的數(shù)據(jù)做地理編碼 225
19.2.3 顯示地圖 227
19.3 天氣數(shù)據(jù) 228
19.4 小結(jié) 230
第 20 章 調(diào)試 231
20.1 調(diào)試原則第 一條 231
20.2 利用REPL和控制臺 232
20.3 使用Node的內(nèi)建調(diào)試器 233
20.4 Node調(diào)試客戶端 233
20.5 調(diào)試異步函數(shù) 237
20.6 調(diào)試Express 237
20.7 小結(jié) 239
第 21 章 上線 240
21.1 域名注冊與托管 240
21.1.1 域名系統(tǒng) 241
21.1.2 安全 241
21.1.3 頂級域名 242
21.1.4 子域名 243
21.1.5 域名服務(wù)器 243
21.1.6 托管服務(wù) 245
21.1.7 部署 247
21.2 小結(jié) 250
第 22 章 維護(hù) 251
22.1 維護(hù)的原則 251
22.1.1 長遠(yuǎn)規(guī)劃 251
22.1.2 使用源代碼控制 253
22.1.3 使用問題跟蹤系統(tǒng) 253
22.1.4 保持良好的“衛(wèi)生習(xí)慣” 253
22.1.5 不要拖延 253
22.1.6 例行QA核查 254
22.1.7 監(jiān)控分析 254
22.1.8 優(yōu)化性能 255
22.1.9 優(yōu)先跟蹤潛在客戶 255
22.1.10 避免“不可見”的故障 256
22.2 代碼重用與重構(gòu) 257
22.2.1 私有npm倉庫 257
22.2.2 中間件 257
22.3 小結(jié) 259
第 23 章 更多資源 260
23.1 在線文檔 260
23.2 期刊 261
23.3 Stack Overflow 261
23.4 對Express做貢獻(xiàn) 263
23.5 小結(jié) 265
關(guān)于作者 266
關(guān)于封面 266