前端每週清單專一前端領域內容,以對外文資料的蒐集爲主,幫助開發者瞭解一週前端熱點;分爲新聞熱點、開發教程、工程實踐、深度閱讀、開源項目、巔峯人生等欄目。歡迎關注【前端之巔】微信公衆號(ID:frontshow),及時獲取前端每週清單;本文則是對於半年來發布的前端每週清單中的 Node.js 相關的教程實踐與開源項目的盤點,能夠查看這裏得到往期清單或者其餘盤點篇。html
掌握 Node.js 核心模塊之文件系統:本文介紹 Node.js 核心模塊中與文件系統、文件流等相關的部分,同時還介紹了實際開發中經常使用的第三方文件庫。本文首先介紹了基本的讀取與寫入操做,而後介紹了權限控制、監聽等功能,最後討論了使用 graceful-fs、mock-fs、lockFile 等優秀的第三方庫來輔助開發。( https://parg.co/bMj )前端
《關於Node.js存在反序列化遠程代碼執行漏洞的安全公告》:近日,國家信息安全漏洞共享平臺(CNVD)收錄了Node.js反序列化遠程代碼執行漏洞(CNVD-2017-01206,對應 CVE-2017-594)。攻利用漏洞執行遠程執行操做系統指令,得到服務器權限。因爲目前驗證代碼已經公開,極有可能誘發大規模網站攻擊。Node.js反序列化模塊node-serialize庫中的unserialize()函數未作安全處理,該漏洞經過傳遞調用JavaScript IIFE函數表達式的方式實現遠程任意代碼執行的效果。攻擊者可經過遠程攻擊得到當前服務器運行環境權限,因爲實際部署中node.js運行環境較多爲操做系統root權限,所以可徹底控制服務器主機。CNVD對該漏洞的綜合評級爲「高危」。目前,相關利用方式已經在互聯網上公開,近期出現攻擊嘗試爆發的可能。不過根據原做者表述,實際上這個庫在 GitHub 上一共只有 20 個 star,還有幾個是漏洞文章發佈後引來的,並且下載量也是很是少。若是想要避免此類安全問題,須要解決的就是確保用戶輸入的安全。方法好比經過安全傳輸方式(內網 & 加密)傳輸序列化字符串、使用如 RSA 等簽名算法對字符串進行完整化校驗。node
《一次一個微優化,改進Node.js應用的吞吐量》:本文是多個提升 Node.js 應用吞吐量的小優化技巧介紹,包括儘量地使用聚合 IO 操做,以批量寫的方式來最小化系統調用的次數、須要將發佈的開銷考慮進內,清除應用中不一樣的定時器、CPU 分析器可以給你提升一些有用信息,可是並不能完整地反饋整個流程、謹慎使用 ECMAScript 高級語法,特別是你還未使用最新的 JavaScript 引擎或者相似於 Babel 這樣的轉換器的時候、要洞察你的依賴樹的組成而且對你使用的依賴進行適當的性能評測。當咱們但願去優化某個包含了 IO 功能的應用性能時,咱們須要對於應用耗費的 CPU 週期以及那些妨礙到應用並行化執行的因素瞭如指掌。本文則是分享做者在提高 Apache Cassandra 項目中的 DataStax Node.js 驅動時的一些思考與總結出的致使應用吞吐量降級的關鍵因素。git
《併發與並行:理解 Node.js 中 IO 底層機制》:本系列但願能幫助開發者深刻了解開發併發應用的相關知識,而本文則是着眼於相對基礎的操做系統級別的調度、應用的 IO 這些知識。github
《Node.js 社區的發展之道:質量與速度並重》: Node.js 社區的核心目標之一就是在快速迭代的同時保證代碼質量,新發布的版本務必與以前的版本保持相同的穩定性,避免形成生產環境下應用的崩潰。Node.js 社區並無一味的尋求妥協,而是不斷突破本身,從而在保證變動速度的同時達成較高的質量要求。文本則是 Node.js 社區對於他們發佈版本、變動流程以及自動化測試、性能測試等多方面的介紹。算法
《爲什麼使用 Node.js ?》:本文來自於 Node.js 的技術專家 Tomislav Capan,此文最先發佈於 2013 年,詳細介紹了 Node.js 的內部原理,而且論述了 Node.js 適用的業務場景與典型的範模式。( http://suo.im/3sFwvm )npm
《你應該知道的關於 Node.js 中模塊導入的知識》:在 Node.js 開發中咱們時刻都在於其模塊機制打交道,而本文做者則深刻淺出地介紹了 Node.js 中負責處理模塊依賴的兩個核心模塊:require 與 module;而且介紹了不一樣的導入對象在 Node.js 中實際的遞歸處理流程以及最終在 module 中造成的元數據描述。( https://parg.co/bQl )json
《Node.js 應用監控實踐指南》:本文介紹生產環境下 Node.js 應用監控實踐指南,包括了監控的意義、監控的對象、目前開源的監控解決方案以及一些 SaaS 解決方案等。( https://parg.co/bhb )後端
《使用 Faker.js 爲 Node.js 應用建立模擬數據》:在應用開發中咱們每每會頭疼於如何構建大量的隨機數據,特別是那些符合某些固定模式的數據,咱們可能會要用這些數據仿製 RESTful 接口、進行單元測試等等。而 Faker.js 則爲咱們提供了這樣的隨機數據生成器。( https://parg.co/bhU )api
《Node.js 運行時介紹》:本文是一篇不錯的 Node.js 入門介紹的文章,包括了 Node.js 中常見的概念知識、JavaScript 併發模型以及基於 Event Loop 的實現、Node.js 內置的對象,以及 Node.js 緣何取名爲 Node.js 等等。( https://parg.co/b4I )
《TypeScript 在 Slack 的實踐分享》:維護大型的跨平臺的 JavaScript 代碼庫是一件很是具備挑戰性的工做,不管是從 Chrome 的 JavaScript 中傳遞對象給 Objective-C 或者單純的接受來自 Node.js 中的回調結果,你都須要保證不一樣的代碼對於通信對象的指望之間的一致性。而本文便是在開發跨平臺多終端的應用中,Slack 使用 TypeScript 來約束類型,從而避免意外的類型不一致致使的崩潰的實踐經驗分享。( https://parg.co/bRR )
《Node.js 中 Object Streams 的終極指南》:Node.js 中的流爲咱們提供了強大的功能,容許咱們異步地處理輸入與輸出,或者在多個獨立步驟中進行數據轉換。而本文則是首先回顧了流相關的理論,而後介紹瞭如何像 Gulp 那樣進行對象流的轉換操做。( https://parg.co/bfV )
《在 Node.js 應用中如何使用 ESLint》:ESLint 是開源的 JavaScript Linting 工具,它可以幫助開發者解決 JavaScript 無類型語言自己帶來的一些錯誤。ESLint 遵循組件化的設計思想,它容許開發者動態地設置使用的規則,而本文便是介紹基礎的 ESLint 環境搭建與使用方法的文章。( https://parg.co/bN4 )
《8 小時內學習 Node.js》:Node.js 是基於 Google Chrome V8 引擎的 JavaScript 框架,其可以用於開發相似於視頻直播、單頁應用等 IO 密集型的 Web 項目。而本文則是提供了完整的從零到一的 Node.js 學習路線圖,包含了基礎的環境構建、Console 使用、核心模塊使用、基本的 Web 服務器搭建等等內容。( https://parg.co/bNy )
《掌握 Node.js 核心模塊之文件系統》:本文介紹 Node.js 核心模塊中與文件系統、文件流等相關的部分,同時還介紹了實際開發中經常使用的第三方文件庫。本文首先介紹了基本的讀取與寫入操做,而後介紹了權限控制、監聽等功能,最後討論了使用 graceful-fs、mock-fs、lockFile 等優秀的第三方庫來輔助開發。( https://parg.co/bMj )
《使用 Electrino 減小近 99% 的應用大小》:Electro 是很是不錯的利用 Web 技術開發跨平臺桌面應用的運行時,不過其缺陷在於打包的應用中每每須要攜帶 Node.js 與 Chromium 的完整框架,致使了即便是最簡單的 HelloWorld 應用也有近 115MB。而 Electrino 提供了相似於 Electron 的接口,不過使用系統自帶的 Web 運行時來替代 Chromium,從而保證最後打包出來的應用僅有原來的 0.1% 大小。Electrino 適用於那些不依賴於操做系統自己功能的應用,項目也處於開發狀態。( https://parg.co/bM2 )
《調試 Node.js 應用的最佳工具》:調試,也就是尋找與修復軟件中存在問題的過程一直是 Node.js 項目構建過程當中的挑戰之一,而本文則是介紹瞭如何利用那些優秀的工具來輔助進行 Node.js 代碼調試。本文首先介紹日誌相關內容,恰當的日誌可以幫助開發者在生產環境中迅速定位到錯誤所在;而後本文介紹瞭如何在開發環境中直接調試 Node.js 應用。( https://parg.co/bMB )
《Node.js 根本沒有 float:浮點反序列化錯誤背後的故事》:在 Node.js 中,當咱們把一個浮點數序列化,再反序列化,竟然出錯了,這是爲何呢?做者經過刨根問底的追查,發現 Node.js 根本沒有 float!( https://parg.co/bMX )
《編寫安全的 Node.js 代碼》:本文是對於 Danny Grander 演講的總結,他首先回顧瞭如何黑掉有漏洞的 Node.js 應用,同時也深度闡述了數個流行的 npm 包中存在的安全威脅;最後做者給出了修復這些漏洞以及在將來應用開發中保證 Node.js 代碼安全性的建議。( https://parg.co/bVL )
《須要掌握的 Node.js Streams 相關知識》:Node.js steams 一直以來都被詬病難以理解與使用,近年來也有很多的開發者建立了封裝庫以便於使用 Node.js streams;不過本文追本溯源,着重於介紹 Node.js Streams 的基本語法而且理清常見的誤解。本文首先以簡單的利用 Stream 讀取文件的例子來介紹 Stream 的概念,而後介紹了 Node.js 中四個流以及其具體實現方式。( https://parg.co/bJN )
《N-API:下一代編寫 Node.js 原生模塊的接口》:Node.js 有着很是龐大而又生機勃勃的模塊生態圈,這也是其一直保有活力與魅力的源泉。而如今的不少基於 C/C++ 編寫的原生模塊直接依賴於 V8 或者 NAN 接口,致使了它們缺少穩定性的暴走,而且須要隨着 Node.js 版本的更迭而不斷變化或者重編譯。而 N-API 則致力於解決這個問題,文本便是對於 N-API 的基本語法與當前狀態的介紹。( https://parg.co/bip )
《Yarn 與 npm5 比較》:隨着 Node.js 8.0.0 一塊兒發佈的 npm 5.0.0 不只在性能上獲得了極大提高,還經過引入相似於 yarn.lock 的 package-lock.json 文件來實現所謂可肯定的包管理。本文則是介紹了所謂可肯定的包管理的具體含義,以及 yarn 與 npm5 各自不一樣的實現方式與優缺性的比較。( https://parg.co/bir )
《JavaScript 模塊現狀》:近日隨着各大瀏覽器紛紛開始支持 ESM(ECMAScript Moduls),Node.js 中也計劃引入 *.mjs
做爲 ESM 的文件擴展名,關於 JavaScript 模塊化的將來發展也在社區引起了熱切討論。本文則是首先介紹了 ESM 在瀏覽器、Webpack 等構件工具以及 Node.js 中將來的實現,而後討論了我的對於 ESM 將來發展以及對於程序開發自己的潛在影響。( https://parg.co/bi0 )
《Node.js 8 中 util.promisify 介紹》:Node.js 8 爲咱們提供了新的工具函數 util.promisify(),它可以將某個基於回調的函數封裝爲基於 Promise 的函數。本文介紹了 util.promisify() 的基本使用,首先介紹了對於文件讀取寫入相關接口的封裝使用,而後討論瞭如何引入 async 語法,最後還介紹了自定義 promisify 函數的用法。
《你應該掌握的關於 Node.js 子進程的知識》:Node.js 最初以單進程單線程非阻塞方式提供了強大的性能表現,不過在目前多核時代下僅使用單進程已遠遠不能承載日益增加的應用壓力。本文即介紹在 Node.js 中如何使用 spawn()、exec()、execFile()、fork() 等多進程相關模塊的用法與各自的特色,依次介紹了使用 spawn 來建立實現了 EventEmit 接口的子進程、使用 exec 執行子命令、使用 fork 建立自帶通訊信道的子進程等。( https://parg.co/bLq )
16 行代碼構建基於 Node.js 的天氣應用:本文是一篇淺顯易懂的 Node.js 入門實踐介紹,做者利用 Node.js 抓取來自 OpenWeatherMap 的開放數據而且打印在控制檯中。本文依次介紹瞭如何註冊而且得到 OpenWeatherMap 的 ApiKey、如何使用 npm 初始化項目、如何利用 request 抓取數據、如何優化命令行交互顯示等等。( https://parg.co/byY )
基於 Prometheus 的 Node.js 應用性能監控:本文致力於幫助已有生產環境下 Node.js 應用的開發者,瞭解如何利用開源應用 Prometheus 搭建監測平臺;Prometheus 爲咱們提供了強大的數據壓縮與針對時序數據的快速查詢功能。本文首先討論了 Node.js 應用監控的設計理念與指標,而後對比了當前存在的幾種監控解決方案的優缺點。最後介紹瞭如何在項目中引入 Prometheus,而且集成 Kubernetes、Grafana 等第三方插件;更多 Node.js 相關資料參考 https://parg.co/be0 。( https://parg.co/bed )
擴展 Node.js 應用:Node.js 設計的初衷之一便是保證其可擴展性,本文則詳細介紹了開發者應該瞭解的可用於擴展 Node.js 應用的內建工具。本文首先介紹了複製、分解、分割等經常使用的設計思想,而後討論瞭如何利用 Node.js 內置的 Cluster 模塊來保證應用的可擴展性與如何提供零停機重啓的特性。
Node.js 實戰第二版:該倉庫是 Azat Mardan 的著做 Practical Node.js 第二版參考的開源發佈地址,包含了十二個章節與相關的示範代碼,很是值得一讀。該書依次介紹了 Node.js 環境搭建與 Express.js 初探、基於 Mocha 的單元測試、模板引擎、數據持久化與性能優化、項目調試、部署與發佈等章節;更多 Node.js 相關資料參考 https://parg.co/be0 。
使用 Apollo Server 快速開發基於 Node.js 的 GraphQL 服務端:Apollo Server 是由社區維護的開源 GraphQL 服務端,它支持目前主流的 Node.js HTTP 服務端框架:Express、Connect、Hapi、Koa、AWS Lambda、Restify 以及 Micro。本文首先介紹 Apollo Server 遵循着開放、簡單、高性能的原則,而後介紹了基於 Express 的基礎用法以及性能監控等內容;更多 GraphQL 相關資料參考 https://parg.co/b1e 。
swagger-decorator:swagger-decorator 是旨在一處註解多處使用的 JavaScript & Node.js 應用中實體類與方法註解庫,其可以用於實體類生成與校驗、Sequelize ORM 實體類生成、面向 Koa 的路由註解與 Swagger 文檔自動生成的場景。
基於 Node.js 與 HTML5 的視頻流:本文一步一步地介紹如何構建基礎的 Node.js 接口,而且添加某個路由從而將視頻文件發送給前端。本文首先介紹了 Node.js 中流的基礎概念與如何獲取文件體積、從文件建立流而且獲取塊的大小等基本 API,而後介紹瞭如何搭建服務器而且添加合適的路由以返回視頻流,最後介紹了前端如何利用 HTML5 的 video 標籤實現視頻播放與控制;更多 Node.js 相關資料參考 https://parg.co/be0 。
Node.js 微服務實踐:微服務架構目前正在大行其道,不過做者發現因爲不少人有本身獨到的看法,微服務架構的變種與複雜度在持續增長;做者則但願經過本文使初學者快速地利用 Node.js 開發出簡單的微服務。本文首先介紹了微服務出現的背景以及微服務的五個原則:零配置、高冗餘、可容錯、自我修復、自動發現;而後介紹了使用 cote 這個微服務庫一步一步地實現 Node.js 微服務集羣,依次建立 Requester、Responder 等基礎組件以最終實現系統中的幾個相互依賴的模塊。更多 Node.js 相關資料參考 https://parg.co/be0 。
Node.js 實踐教程:本教程是但願以一些有名的模塊/功能爲基礎, 在實現的過程當中講解各項知識點,主要分爲控制流、Web、存儲等幾個部分。目前完成的模塊包括 async 介紹、Promise 實現、coroutine 實現、co 模塊介紹、HTTP Client 實現、HTTP Server 實現等;更多 Node.js 相關資料參考 https://parg.co/be0 。
Node.js 如何解析 Form 上傳?:NPM 和 GitHub 裏的開源組件幫咱們解決了不少繁瑣的工做,可是也讓咱們失去了不少深刻技術細節的機會。在現有組件沒法知足咱們需求的時候,就須要咱們來本身動手豐衣足食了。 做者前段時間遇到了一個須要手動解析 Form 表單上傳的機會,也藉此爲各位解析一下 Node.js 解析 Form 上傳的實現細節。更多 Node.js 相關資料參考 https://parg.co/be0 。
利用 Node.js 構建 API Gateway:隨着現代業務複雜度的增長,微服務的理念正在獲得更多的落地實踐;做爲微服務架構的重要組成部分,API Gateway 可以爲全部的後端服務提供統一的權限校驗與客戶端協議兼容的抽象層。本文首先介紹了微服務的基礎架構與 API Gateway 的概念,而後介紹了面向前端團隊的 Node.js API Gateway 組成;接下來詳細的分析了 API Gateway 的基礎功能需求:路由與版本、迭代式設計、權限校驗、數據聚合、數據序列化與反序列化、限流與緩存等等,最後討論了基於 Express 的 API Gateway 的實現。更多 Node.js 相關資料參考這裏。
利用 std/esm 在 Node.js 開發中使用 ES Modules:隨着主流瀏覽器逐步開始支持 ES Modules 標準,愈來愈多的目光投注於 Node.js 對於 ESM 的支持實現上;Node.js 擬計劃在 2020 年發佈的 9.x 版本中引入內置的 ESM 支持。而近日正式發佈的 @std/esm 爲咱們提供了高性能的 Node.js 中 CommonJS 與 ES Modules 模塊間調用,其可以做用於 Node.js 4.x 以上版本;它可以順滑地集成到現有的 Webpack、Babel 環境中,而且支持不一樣模塊使用不一樣的依賴版本。不一樣於目前的解決方案須要是發佈編譯以後的 CommonJS 格式的文件,@std/esm 可以以最小的代價的、按需轉化的、動態緩存的方式來進行源代碼轉化。更多 Node.js 相關資料參考這裏。
你看到的 Node.js 權限校驗指南可能都存在着錯誤:權限校驗幾乎是每一個服務端應用程序的標配,本文做者在搜索學習 Node.js / Express.js 相關的權限校驗教程時發現大部分都或多或少地存在着問題,所以編撰了這篇文章以提醒其餘開發者。常見的誤區可能包括憑證的存儲方式、密碼的重置策略、API Tokens 的生成與校驗、限流等多個方面;更多 Node.js 相關資料參考這裏。
《pkg》:pkg 可以將 Node.js 項目打包爲單個可執行文件,其容許開發者發佈商業級應用而不用擔憂源代碼泄露的風險。pkg 會自動掃描你的 node_modules,而後將須要用到的本地內容打包到可執行文件中。( https://github.com/zeit/pkg )
doppio: doppio 是基於 TypeScript 0.5.0 版本編寫的 Java 虛擬機(JVM),其支持 Node.js 6.0 以上版本,而且內置了 Java 8 JDK 環境;doppio 是個有趣的嘗試打破瀏覽器語言柵欄的嘗試,瀏覽其源代碼也能夠學習如何編寫 Java 虛擬機。
notifme-sdk:notifme-sdk 是用於簡化通知發送流程的 Node.js 庫,它容許咱們靈活地集成郵件、短信、推送、WebPush 等不一樣的渠道來發送通知;notifme-sdk 還容許咱們自由註冊服務提供商,內建的 Fallback 與輪詢機制也能進行簡單的容錯,同時 notifme-sdk 還提供了簡單的 UI 控制檯以方便咱們僅界面化監控。
《使用 create-graphql-server 快速搭建 GraphQL 服務器》:本文介紹瞭如何用幾個簡單的命令快速搭建 GraphQL 服務器,其使用 Node.js 做爲應用後端、Mongodb 做爲數據存儲。( https://parg.co/bfQ )
《Caporal.js》:特性全面的可用於建立 Node.js 命令行工具的框架,包括了幫助信息生成、自動補全等。 ( https://github.com/mattallty/... )