商品簡介
內容簡介
這是一本能指導你零基礎掌握Koa完整知識體系並深入理解Node.js難點的著作,將帶領你在成為全棧工程師的道路上邁出堅實的一步。
本書作者是字節跳動抖音電商團隊的前端架構師,曾利用Koa和Node.js等技術從零開發過一款可對標Egg的BFF框架,並在生產環境中能支撐上千個線上服務,在Koa和Node.js方面積累了豐富的經驗。
這本書以入門、進階、實戰為學習曲線,從基本用法、底層實現、常見場景解決方案、難點和重點等等角度對Koa和Node.js進行了詳細的講解。主要包括如下如下知識點:
(1)Koa的基本概念和完整用法,構建完整的Koa知識體系;
(2)Koa的源碼實現和底層原理分析;
(3)Koa在實際業務中遇到的問題及其解決方案;
(4)從零搭建一個企業級BFF框架;
(5)BFF框架的架構設計、工程建設以及常見業務場景的解決方案;
(6)Node.js中比較常見但難以理解的概念和知識點;
(7)Node.js底層架構解析。?
全書有大量實例和代碼,能幫助讀者在實踐中迅速從新人成長為高手。
名人推薦
抖音電商前端架構師撰寫,月影等字節技術負責人力薦,講解Koa完整知識體系,成為全棧工程師
目次
前言
第一部分 Koa基礎
第1章 Koa介紹2
1.1 Koa的誕生2
1.2 如何全面掌握Koa3
1.3 環境準備5
1.4 本章小結7
第2章 Koa入門8
2.1 中間件的使用9
2.2 路由該怎麼寫11
2.2.1 原生路由實現11
2.2.2 利用koa-router中間件實現12
2.3 靜態服務器14
2.3.1 koa-static中間件的使用15
2.3.2 如何實現一個靜態服務器16
2.4 模板引擎18
2.4.1 ejs模板的使用18
2.4.2 pug模板的使用20
2.5 處理請求數據21
2.6 Cookie和Session22
2.6.1 你真的瞭解Cookie嗎23
2.6.2 Session的秘密26
2.7 文件上傳34
2.8 跨域問題38
2.9 重寫URL43
2.10 優雅的錯誤處理44
2.11 本章小結48
第二部分 Koa進階
第3章 Koa源碼解析50
3.1 Koa目錄結構50
3.2 Application都做了些什麼52
3.2.1 Koa創建服務的原理52
3.2.2 中間件實現原理55
3.2.3 如何封裝ctx60
3.2.4 handleRequest和respond做了什麼63
3.2.5 異常處理66
3.3 Context的核心實現68
3.3.1 委託機制68
3.3.2 Cookie的操作73
3.4 request的具體實現75
3.5 response的具體實現82
3.6 本章小結86
第4章 Koa在業務場景中的應用87
4.1 路由技巧87
4.1.1 路由分割88
4.1.2 文件路由91
4.2 用戶鑒權機制94
4.2.1 JWT鑒權94
4.2.2 單點登錄101
4.3 數據存儲115
4.3.1 數據庫的使用115
4.3.2 Elasticsearch的接入122
4.4 進程管理130
4.4.1 進程的概念130
4.4.2 創建多進程130
4.4.3 進程通信134
4.5 日誌處理136
4.5.1 log4js牛刀小試136
4.5.2 日誌級別137
4.5.3 日誌分類139
4.5.4 日誌分割141
4.6 本章小結142
第三部分 Koa實戰
第5章 搭建一個企業級BFF框架144
5.1 搭建BFF框架的好處144
5.1.1 技術成長145
5.1.2 個人影響力145
5.2 搭建完整框架145
5.2.1 主工程搭建146
5.2.2 框架核心工程147
5.2.3 example工程148
5.2.4 本地開發調試150
5.3 環境區分152
5.3.1 環境配置152
5.3.2 整合配置153
5.4 服務啟動模塊154
5.4.1 hooks設計154
5.4.2 服務配置157
5.4.3 服務啟動模塊實現157
5.5 路由模塊159
5.5.1 路由模式配置159
5.5.2 文件路由159
5.5.3 koa-router路由162
5.6 靜態服務器模塊165
5.7 cors模塊167
5.7.1 跨域現象167
5.7.2 cors相關配置169
5.7.3 cors核心實現170
5.8 自定義中間件174
5.8.1 中間件加載順序174
5.8.2 加載自定義中間件175
5.9 登錄模塊177
5.9.1 鑒權模塊實現177
5.9.2 Cookie的配置179
5.10 制定模板180
5.10.1 加載模板180
5.10.2 自定義模板181
5.11 bodyparser模塊186
5.12 Redis模塊187
5.12.1 Redis配置188
5.12.2 Redis對象掛載188
5.12.3 使用Redis190
5.13 MySQL模塊191
5.13.1 數據庫配置191
5.13.2 數據庫連接192
5.13.3 數據庫操作193
5.14 Elasticsearch模塊194
5.14.1 連接配置194
5.14.2 掛載194
5.14.3 操作Elasticsearch195
5.15 日誌模塊196
5.15.1 業務日誌有哪些197
5.15.2 日誌模塊實現197
5.15.3 具體使用場景200
5.16 單元測試203
5.16.1 mocha和chai203
5.16.2 編寫測試用例204
5.17 發佈npm包206
5.18 本章小結207
第四部分 Node
第6章 Node中的重要概念210
6.1 模塊機制210
6.1.1 CommonJS規範211
6.1.2 模塊加載原理212
6.2 Node中的I/O213
6.2.1 什麼是無阻塞I/O213
6.2.2 無阻塞I/O原理213
6.2.3 事件循環214
6.3 進程與集群215
6.3.1 進程215
6.3.2 集群217
6.4 進程守護219
6.4.1 如何實現進程守護功能219
6.4.2 進程管理工具pm2221
6.5 Buffer和Stream225
6.6 垃圾回收原理227
6.6.1 V8內存結構227
6.6.2 垃圾回收機制229
6.7 本章小結230
第7章 Node底層解析231
7.1 Node整體架構231
7.2 深入理解Addon233
7.2.1 編譯工具node-gyp233
7.2.2 Node插件開發234
7.3 V8如何解析代碼237
7.3.1 V8的重要組成模塊237
7.3.2 AST是什麼238
7.3.3 如何查看字節碼和彙編代碼239
7.4 libuv架構240
7.5 本章小結242