這是一本能指導(dǎo)你零基礎(chǔ)掌握Koa完整知識(shí)體系并深入理解Node.js難點(diǎn)的著作,將帶領(lǐng)你在成為全棧工程師的道路上邁出堅(jiān)實(shí)的一步。
本書作者是字節(jié)跳動(dòng)抖音電商團(tuán)隊(duì)的前端架構(gòu)師,曾利用Koa和Node.js等技術(shù)從零開發(fā)過一款可對(duì)標(biāo)Egg的BFF框架,并在生產(chǎn)環(huán)境中能支撐上千個(gè)線上服務(wù),在Koa和Node.js方面積累了豐富的經(jīng)驗(yàn)。
這本書以入門、進(jìn)階、實(shí)戰(zhàn)為學(xué)習(xí)曲線,從基本用法、底層實(shí)現(xiàn)、常見場(chǎng)景解決方案、難點(diǎn)和重點(diǎn)等等角度對(duì)Koa和Node.js進(jìn)行了詳細(xì)的講解。
主要包括如下如下知識(shí)點(diǎn):
(1)Koa的基本概念和完整用法,構(gòu)建完整的Koa知識(shí)體系;
(2)Koa的源碼實(shí)現(xiàn)和底層原理分析;
(3)Koa在實(shí)際業(yè)務(wù)中遇到的問題及其解決方案;
(4)從零搭建一個(gè)企業(yè)級(jí)BFF框架;
(5)BFF框架的架構(gòu)設(shè)計(jì)、工程建設(shè)以及常見業(yè)務(wù)場(chǎng)景的解決方案;
(6)Node.js中比較常見但難以理解的概念和知識(shí)點(diǎn);
(7)Node.js底層架構(gòu)解析。
全書有大量實(shí)例和代碼,能幫助讀者在實(shí)踐中迅速從新人成長為高手。
(1)作者背景資深:字節(jié)跳動(dòng)抖音電商前端架構(gòu)師,有多年前端和后端開發(fā)經(jīng)驗(yàn);
(2)作者經(jīng)驗(yàn)豐富:獨(dú)立從零開發(fā)可對(duì)標(biāo)Egg的BFF框架,對(duì)Koa和Node有深入研究;
(3)行業(yè)大牛推薦:抖音電商前端負(fù)責(zé)人李成銀、字節(jié)跳動(dòng)Web Infra負(fù)責(zé)人李玉北、 字節(jié)跳動(dòng)技術(shù)中臺(tái)前端負(fù)責(zé)人月影等大佬聯(lián)袂推薦;
(4)案例豐富、實(shí)戰(zhàn)性強(qiáng):涵蓋Koa完整知識(shí)體系,有大量案例,可指導(dǎo)讀者從零編寫B(tài)FF框架;
(5)深入淺出、原理透徹:深入淺出講解Koa的應(yīng)用、原理和生產(chǎn)環(huán)境中的解決方案,深入講解Node的難點(diǎn)。
備注:
(1)本書內(nèi)容基于Koa2
(2)示例代碼提供下載:https://github.com/SKHon/koa-book-code
●為什么要寫這本書
目前大型互聯(lián)網(wǎng)公司對(duì)于前端工程師的需求越來越大,一些高級(jí)的前端崗位依然非常缺人,候選人的面試通過率卻非常低。究其原因,這些互聯(lián)網(wǎng)公司對(duì)于前端工程師的要求越來越高,它們希望候選人不局限于掌握瀏覽器,也要掌握一些偏后端的技能。對(duì)于前端工程師來說,因?yàn)槠渌玫木幊陶Z言就是我們熟悉的JavaScript,所以學(xué)習(xí)Node比較輕松。Koa是Node中使用比較廣泛的一個(gè)框架,非常值得前端工程師學(xué)習(xí),這是我寫本書的主要原因。
我在上一家公司主要負(fù)責(zé)Node中間層架構(gòu),我開發(fā)的BFF框架服務(wù)于公司內(nèi)部的各個(gè)業(yè)務(wù)。在任職期間,我不斷幫助業(yè)務(wù)方解決線上、線下的各種疑難問題,這讓我對(duì)Node有了更加深入的理解,并且積累了很多Node的使用經(jīng)驗(yàn)。寫這本書也是想分享我的一些經(jīng)驗(yàn),幫助大家在技術(shù)道路上走得更遠(yuǎn),引導(dǎo)大家向全棧方向邁進(jìn)。
Koa在業(yè)界使用比較廣泛,很多知名的BFF框架(比如Egg)都基于Koa實(shí)現(xiàn)。如果能夠透徹理解Koa,那么對(duì)于公司內(nèi)部或者技術(shù)社區(qū)里的一些BFF框架就能夠輕松駕馭。本書由淺入深地講解了Koa的應(yīng)用場(chǎng)景以及實(shí)例代碼。
●讀者對(duì)象
想成為全棧工程師的前端技術(shù)人員。
希望順利入職大型互聯(lián)網(wǎng)公司的前端工程師。
對(duì)Node、Koa有學(xué)習(xí)熱情的前端工程師。
對(duì)開源技術(shù)充滿熱情的前端工程師。
●本書特色
本書除了講解Koa的基礎(chǔ)知識(shí),還講解了如何從零開始搭建一個(gè)企業(yè)級(jí)BFF框架,讀者可以學(xué)到從架構(gòu)設(shè)計(jì)到工程搭建的知識(shí),也可以邊學(xué)邊寫,自己寫一個(gè)BFF框架,這樣對(duì)于提升自身的技術(shù)能力有很大幫助。
●如何閱讀本書
本書分為四部分。
第1部分Koa基礎(chǔ)(第1、2章),主要介紹Koa的基礎(chǔ)概念以及基本用法。
第2部分Koa進(jìn)階(第3、4章),一方面講解Koa的源碼實(shí)現(xiàn),幫助讀者深入理解Koa的底層實(shí)現(xiàn)邏輯,另一方面著重講解Koa在實(shí)際業(yè)務(wù)場(chǎng)景中可能會(huì)遇到的問題以及解決方法。
第3部分Koa實(shí)戰(zhàn)(第5章)主要講解如何從零開始搭建一個(gè)企業(yè)級(jí)BFF框架,涉及架構(gòu)設(shè)計(jì)、工程建設(shè)以及企業(yè)內(nèi)常見業(yè)務(wù)場(chǎng)景的解決方案。
第4部分Node(第6、7章),講解Node中一些比較常見但難以理解的概念,并對(duì)Node底層架構(gòu)進(jìn)行解讀。
這四部分內(nèi)容由淺入深,涵蓋了Koa的絕大多數(shù)知識(shí)點(diǎn)。讀者只要掌握了本書內(nèi)容,就一定能靈活運(yùn)用Koa和Node。
●劉江虹,字節(jié)跳動(dòng)抖音電商前端架構(gòu)師,擁有多年前端架構(gòu)工作經(jīng)驗(yàn)。
獨(dú)立開發(fā)過一款可對(duì)標(biāo)Egg的BFF企業(yè)級(jí)框架,支撐公司線上服務(wù)超過1000個(gè)。全棧前端技術(shù)專家,具備豐富的Node實(shí)戰(zhàn)經(jīng)驗(yàn)。著有暢銷書《React.js實(shí)戰(zhàn)》
【部分 Koa基礎(chǔ)】
●第1章 Koa介紹2
1.1 Koa的誕生2
1.2 如何全面掌握Koa3
1.3 環(huán)境準(zhǔn)備5
1.4 本章小結(jié)7
●第2章 Koa入門8
2.1 中間件的使用9
2.2 路由該怎么寫11
2.2.1 原生路由實(shí)現(xiàn)11
2.2.2 利用koa-router中間件實(shí)現(xiàn)12
2.3 靜態(tài)服務(wù)器14
2.3.1 koa-static中間件的使用15
2.3.2 如何實(shí)現(xiàn)一個(gè)靜態(tài)服務(wù)器16
2.4 模板引擎18
2.4.1 ejs模板的使用18
2.4.2 pug模板的使用20
2.5 處理請(qǐng)求數(shù)據(jù)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 優(yōu)雅的錯(cuò)誤處理44
2.11 本章小結(jié)48
【第二部分 Koa進(jìn)階】
●第3章 Koa源碼解析50
3.1 Koa目錄結(jié)構(gòu)50
3.2 Application都做了些什么52
3.2.1 Koa創(chuàng)建服務(wù)的原理52
3.2.2 中間件實(shí)現(xiàn)原理55
3.2.3 如何封裝ctx60
3.2.4 handleRequest和respond做了什么63
3.2.5 異常處理66
3.3 Context的核心實(shí)現(xiàn)68
3.3.1 委托機(jī)制68
3.3.2 Cookie的操作73
3.4 request的具體實(shí)現(xiàn)75
3.5 response的具體實(shí)現(xiàn)82
3.6 本章小結(jié)86
●第4章 Koa在業(yè)務(wù)場(chǎng)景中的應(yīng)用87
4.1 路由技巧87
4.1.1 路由分割88
4.1.2 文件路由91
4.2 用戶鑒權(quán)機(jī)制94
4.2.1 JWT鑒權(quán)94
4.2.2 單點(diǎn)登錄101
4.3 數(shù)據(jù)存儲(chǔ)115
4.3.1 數(shù)據(jù)庫的使用115
4.3.2 Elasticsearch的接入122
4.4 進(jìn)程管理130
4.4.1 進(jìn)程的概念130
4.4.2 創(chuàng)建多進(jìn)程130
4.4.3 進(jìn)程通信134
4.5 日志處理136
4.5.1 log4js牛刀小試136
4.5.2 日志級(jí)別137
4.5.3 日志分類139
4.5.4 日志分割141
4.6 本章小結(jié)142
【第三部分 Koa實(shí)戰(zhàn)】
●第5章 搭建一個(gè)企業(yè)級(jí)BFF框架144
5.1 搭建BFF框架的好處144
5.1.1 技術(shù)成長145
5.1.2 個(gè)人影響力145
5.2 搭建完整框架145
5.2.1 主工程搭建146
5.2.2 框架核心工程147
5.2.3 example工程148
5.2.4 本地開發(fā)調(diào)試150
5.3 環(huán)境區(qū)分152
5.3.1 環(huán)境配置152
5.3.2 整合配置153
5.4 服務(wù)啟動(dòng)模塊154
5.4.1 hooks設(shè)計(jì)154
5.4.2 服務(wù)配置157
5.4.3 服務(wù)啟動(dòng)模塊實(shí)現(xiàn)157
5.5 路由模塊159
5.5.1 路由模式配置159
5.5.2 文件路由159
5.5.3 koa-router路由162
5.6 靜態(tài)服務(wù)器模塊165
5.7 cors模塊167
5.7.1 跨域現(xiàn)象167
5.7.2 cors相關(guān)配置169
5.7.3 cors核心實(shí)現(xiàn)170
5.8 自定義中間件174
5.8.1 中間件加載順序174
5.8.2 加載自定義中間件175
5.9 登錄模塊177
5.9.1 鑒權(quán)模塊實(shí)現(xiàn)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對(duì)象掛載188
5.12.3 使用Redis190
5.13 MySQL模塊191
5.13.1 數(shù)據(jù)庫配置191
5.13.2 數(shù)據(jù)庫連接192
5.13.3 數(shù)據(jù)庫操作193
5.14 Elasticsearch模塊194
5.14.1 連接配置194
5.14.2 掛載194
5.14.3 操作Elasticsearch195
5.15 日志模塊196
5.15.1 業(yè)務(wù)日志有哪些197
5.15.2 日志模塊實(shí)現(xiàn)197
5.15.3 具體使用場(chǎng)景200
5.16 單元測(cè)試203
5.16.1 mocha和chai203
5.16.2 編寫測(cè)試用例204
5.17 發(fā)布npm包206
5.18 本章小結(jié)207
【第四部分 Node】
●第6章 Node中的重要概念210
6.1 模塊機(jī)制210
6.1.1 CommonJS規(guī)范211
6.1.2 模塊加載原理212
6.2 Node中的I/O213
6.2.1 什么是無阻塞I/O213
6.2.2 無阻塞I/O原理213
6.2.3 事件循環(huán)214
6.3 進(jìn)程與集群215
6.3.1 進(jìn)程215
6.3.2 集群217
6.4 進(jìn)程守護(hù)219
6.4.1 如何實(shí)現(xiàn)進(jìn)程守護(hù)功能219
6.4.2 進(jìn)程管理工具pm2221
6.5 Buffer和Stream225
6.6 垃圾回收原理227
6.6.1 V8內(nèi)存結(jié)構(gòu)227
6.6.2 垃圾回收機(jī)制229
6.7 本章小結(jié)230
●第7章 Node底層解析231
7.1 Node整體架構(gòu)231
7.2 深入理解Addon233
7.2.1 編譯工具node-gyp233
7.2.2 Node插件開發(fā)234
7.3 V8如何解析代碼237
7.3.1 V8的重要組成模塊237
7.3.2 AST是什么238
7.3.3 如何查看字節(jié)碼和匯編代碼239
7.4 libuv架構(gòu)240
7.5 本章小結(jié)242