iKcamp新書上市《Koa與Node.js開發實戰》
內容摘要
Node.js 10已經進入LTS時代!其應用場景已經從腳手架、輔助前端開發(如SSR、PWA等)擴充套件到API中間層、代理層及專業的後端開發。Node.js在企業Web開發領域也日漸成熟,無論是在API中間層,還是在微服務中都得到了非常好的落地。本書將通過Web開發框架Koa2,引領你進入Node.js的主戰場! 本書系統講解了在實戰專案中使用Koa框架開發Web應用的流程和步驟。第1章介紹Node.js的安裝、開發工具及除錯。第2章和第3章介紹搭建Koa實戰專案的雛形。第4章詳細介紹HTTP基礎知識及其實戰應用。第5章介紹MVC、模板引擎和檔案上傳等實用功能。第6~8章介紹資料庫、單元測試及專案的優化與部署。第9~13章介紹從零開始搭建時下火爆的微信小程式前端及後臺管理應用的全部過程,以及最終的伺服器部署,包括HTTPS、Nginx。 本書示例豐富、側重實戰,以完整的實戰專案貫穿全部章節,並提供書中涉及的所有原始碼及部分章節的配套視訊教程,將是前端開發人員立足新領域和後端開發人員瞭解Node.js並使用Koa2開發Web應用的得力助手。
前言
Node.js誕生於2009年,到本書出版時已經有近10個年頭。它擴充了JavaScript的應用範圍,使JavaScript也能像其他語言一樣操作各種系統資源,因此,前端工程化開發的大量工具都開始執行在Node.js環境中。由於Node.js採用事件驅動、非阻塞I/O和非同步輸出來提升效能,因此大量I/O密集型的應用也採用Node.js開發。掌握Node.js開發,既能極大地拓寬前端開發者的技術知識面,也能拓展前端開發者的生存空間,從目前前端開發者越來越多的環境中脫穎而出。
由於Node.js僅提供基礎的類庫,開發者需要自主合理地設計應用架構,並呼叫大量基礎類庫來進行開發。為了提升開發效率和降低開發門檻,相關技術社群湧現出不少基於Node.js的Web框架。
Express框架在Node.js誕生之初出現,並迅速成為主流的Web應用開發框架。在社群中,大量的第三方開發者開發了豐富的Express外掛,極大地降低了基於Node.js的Web應用開發成本,同時也帶動了大量的開發者選擇使用Express框架開發Web應用。但Express框架採用傳統的回撥方式處理非同步呼叫,對於經驗不足的開發者來說,很容易將程式碼寫成“回撥地獄”,使開發的應用難以持續維護。在ECMAScript 6的規範中提出了Generator函式,依據該規範,Express的作者TJ Holowaychukgithub.com/tj巧妙地開發了co庫github.com/tj/co,使開發者能夠通過yield關鍵詞,像編寫同步程式碼一樣開發非同步應用,從而解決了“回撥地獄”問題。2014年,他基於co庫開發了新一代的Web應用開發框架Koa,用官方語言來描述這個框架就是“next generation web framework for Node.js”。
社群開發者為Koa開發了大量的外掛,與Express相比,兩者的處理機制存在根本上的差異。Express的外掛是順序執行的,而Koa的中介軟體基於“洋蔥模型”,可以在中介軟體中執行請求處理前和請求處理後的程式碼。ECMAScript 7提供了Async/Await關鍵詞,從語法層面更好地支援了非同步呼叫。TJ Holowaychuk在Koa的基礎上,採用Async/Await取代co庫處理非同步回撥,釋出了Koa第2版(簡稱Koa2)。隨著Node 8 LTS(Long Term Support,長期支援)的釋出,LTS版本正式支援ECMAScript 7規範,選擇使用Koa開發框架開發的Node.js Web應用也越來越多,Koa框架逐步取代了Express框架。 儘管目前Koa非常流行,但“純天然”支援ECMAScript 7語法的Node.js 8在2017年10月才正式釋出。目前,市面上介紹Koa的書籍幾乎沒有,大多介紹的是Express框架,本書可以說是第一本介紹Koa的書籍。本書從Node.js基礎、HTTP、Koa框架、資料庫、單元測試和運維部署等方面全方位地介紹了應用開發所應具備的知識體系。通過閱讀本書,讀者可以瞭解Node.js開發的方方面面,減少實際開發中出現的問題。同時,本書的重點章節也提供了線上程式碼講解和視訊,讀者可以在閱讀本書的同時,結合線上程式碼講解和視訊,更容易地理解本書介紹的知識。
特別感謝杜珂珂、哈志輝、姜帥、李波、李益、盛瀚欽、田小虎、徐磊、閆萌、趙晨雪(排名不分先後)對線上培訓音視訊課程資源的開發和支援。
本書特色
- 重點章節附帶教學視訊。 為了便於讀者理解本書的內容,一些基礎、重點的內容配有視訊教程。讀者可以訪問https://ikcamp.com,結合書中內容觀看視訊。
- 所有原始碼託管於GitHub。 為了降低讀者獲取原始碼的難度,本書的所有原始碼都託管於GitHub(github.com/ ikcamp),讀者也可通過GitHub直接和本書作者溝通。
- 一線網際網路公司Node.js技術棧實戰經驗總結。 本書補充了前端開發者所不具備的後端開發技能和規範,介紹瞭如何開發Koa應用,如何通過ORM(Object Relational Mapping,物件關係對映)類庫讀寫資料庫,如何通過單元測試來保障程式碼質量,如何通過PM2、CI等方式啟動並部署Node.js應用,以及如何採用日誌、監控來保障線上應用的穩定執行等內容。
- 典型專案案例解析,實戰性強。 本書第3篇通過雲相簿小程式開發專案介紹了目前流行的小程式技術,包括小程式登入流程、掃碼登入、檔案上傳、相簿管理等功能。通過學習本書的相關內容,讀者可以獨立開發時下流行的小程式和其需要的後端服務。
本書知識體系
第1篇 基礎知識(第1~4章)
這部分介紹了開發Koa應用需要具備的預備知識,包括Node.js入門、遇見Koa、路由和HTTP共4個章節。 在第1章中,介紹了Node.js的歷史和發展過程,以及Node.js基礎和環境準備。介紹了NPM(Node Package Manager,Node.js的第三方包管理工具),通過該包管理工具,開發者能夠方便地使用大量的第三方軟體包。本章還介紹了微軟公司推出的免費開發工具:Visual Studio Code編輯器,以及如何使用該編輯器除錯Node.js應用。 在第2章中介紹了Koa的發展歷程和作為Koa核心技術的中介軟體。 在第3章中介紹了路由的概念,以及Koa中最流行的路由中介軟體koa-router。 在第4章中介紹了HTTP的基礎知識,以及HTTP的後續協議HTTP/2;介紹了在Node.js中如何獲取客戶端傳遞來的資料,如何通過koa-bodyparser中介軟體獲取請求中的body資料等。
第2篇 應用實戰(第5~8章)
這部分介紹了應用開發各個環節的知識,包含構建Koa Web應用、資料庫、單元測試、優化與部署共4個章節。 在第5章中介紹了MVC架構、模板引擎、靜態資源,以及如何輸出JSON資料,如何通過koa-multer中介軟體上傳檔案等。 在第6章中介紹了資料庫的概念和以MySQL為代表的關係型資料庫,以及如何通過ORM類庫操作MySQL資料庫;介紹了以MongoDB為代表的非關係型資料庫,以及如何在Node.js中操作MongoDB;介紹了以Redis為代表的新型快取資料庫,以及如何在Node.js中利用Redis實現Session持久化。 在第7章中介紹了Chai斷言庫,它用來檢測單元測試過程中的結果是否符合預期;介紹了Mocha測試框架,使用該框架可以編寫和執行單元測試程式碼;介紹了使用SuperTest工具測試HTTP服務,以及通過Nock庫模擬HTTP服務請求響應;最後,介紹了Nyc工具,用以檢查單元測試的覆蓋率、提升程式碼質量。 在第8章中介紹瞭如何記錄日誌和統一捕獲異常,以及如何輸出自定義錯誤頁;介紹瞭如何通過PM2、Docker啟動應用,如何通過CI整合釋出應用,如何通過Nginx提供HTTPS支援;介紹瞭如何利用日誌等途徑監控伺服器執行情況,以及如何利用PM2提供的Keymetrics監控雲伺服器。
第3篇 專案實戰:從零開始搭建微信小程式後臺(第9~13章)
這部分通過介紹時下最流行的小程式開發,結合具體的相簿小程式來說明如何開發一個完整的小程式,以及如何部署小程式。其中,彙總本書前面章節的知識介紹了小程式的功能模組、介面開發、小程式開發、管理後臺開發和服務部署。 在第9章中介紹了小程式應具備的產品功能及如何開發小程式入口網站。 在第10章中介紹了小程式登入流程,掃碼登入的邏輯和實現方式,小程式中用到的介面和後臺管理系統需要的介面。具體包括如何通過中介軟體來鑑權,如何統一控制後臺管理系統的許可權,如何通過Mongoose來定義資料模型和訪問、儲存資料,如何使用log4js記錄日誌。 在第11章中介紹了開發微信小程式的流程,以及如何藉助微信開發者工具開發小程式。 在第12章中介紹了開發後臺管理系統的整體架構和設計思路,並提供了一套登入與鑑權的技術方案。 在第13章中介紹了小程式相關服務的線上部署過程,包括對資料庫、Nginx、HTTPS、和Koa服務的部署,具體包括如何通過Nginx實現把多個域名解析到同一臺雲伺服器上,如何通過PM2管理應用。
本書適合讀者
- Web前端開發人員
- 對Node.js應用感興趣的開發人員
- Node.js開發的自學者
- 大中專院校相關專業的教師和學生
- 相關培訓機構的學員
本書由陳達孚、金晶、幹珺、張利濤、戴亮、周遙、薛淑英編寫。本書涉及的技術知識點較多,作者團隊成員雖竭力爭取奉獻好的作品以使技術得到更好的普及,但難免存在疏漏和不足,讀者如有問題或建議,可以直接到iKcamp的GitHub上留言。本書原始碼也可前往GitHub上獲取,地址為https://github.com/ikcamp。本書部分內容配有視訊,可前往https://camp.qianduan.group/koa2/2/0/0觀看。