為什么我這么喜歡 Node.js —— 因為 Promises, Express 和 CLI
幾年前我發布了一篇[關于Node.js的博文](http://adamfowler.org/2013/05/08/why-i-like-node-js/)。在最近做了幾次對博文更加瘋狂的填充之后,我想我寫這篇文章更多的原因是因為我熱愛[Node.js](http://www.nodejs.org/)!
Promises, Promises
在我之前的文章里我曾提到過“bracket hell”。當然,在介入一段時間后,我開始使用使用Promises做很多事兒,尤其是npm里的[Q promises 庫]。
Promises允許你進行簡單的鏈式操作。你可以并行執行代碼,直到它們執行完成,或順序執行,或者二者混用!我曾在上周使用過二者混用,使用[Q.all](https://www.npmjs.com/package/q#combination)來啟動10個“線程”,每個線程使用[promisesArray.reduce](https://www.npmjs.com/package/q#sequences)順序跑1500個任務。
這讓我可以通過很少的幾行代碼,去大規模的測試客戶的基于[Node.js](http://www.nodejs.org/) Express web框架的應用,在[MarkLogic Server](http://developer.marklogic.com/)里輪流測試高吞吐量和查詢負載。
Express Web Apps
創建web server聽起來挺嚇人的,但使用[Express](https://www.npmjs.com/package/express)卻非常非常的簡單。你僅僅需要中間截取你需要的小量的路由(URL patterns),這樣就完成了!
你甚至可以使用URL pattern自身的推斷參數。例如/get/fred/1 可以用于獲取在fred集合里的第一個文檔。相當酷吧,讓人不禁想到Ruby on Rails。
如果要是想開發web應用的話,無疑我會優先推薦學習Express。
命令行應用
你知道可以使用Node創建一個可以在各個平臺上全局安裝的NPM包應用么?這就是NPM的**酷的**形式。
我把它用到我的[mlnodetools](https://github.com/adamfowleruk/mlnodetools)包里,把我在項目里的2個工具打包到里面。mljsadmin允許你捕獲MarkLogic應用和所有服務器設置,并通過幾個命令把它傳送到另一個機器。mljsserve使用上文提到的Express來創建一個小web server,使用它代理MarkLogic REST API URLs直接代理到MarkLogic服務器。
在MarkLogic銷售引擎中做的事兒是闡述web應用非常棒的(順便說一下,我們正在招聘,如果你們感興趣的話請聯系我)。
我在mljsadmin里使用的幾個NPM包:-
- [minimist](https://www.npmjs.com/package/minimist)用于解析命令行參數。我無法表達我對它足夠強大能力的熱愛!
- [q](https://www.npmjs.com/package/q)再次用于promises,把復雜函數鏈接一起(所以當’install’順序執行9各子命令, runs about 9 sub-commands in series, which can also each be ran on their own from the command line)
- [winston](https://www.npmjs.com/package/winston)用于在命令行(info level)或文件(debug level)里記錄日志輸出和錯誤。我也在我的 [mljs MarkLogic REST API wrapper](https://github.com/adamfowleruk/mljs) 里也用它了.
- [istextorbinary](https://www.npmjs.com/package/istextorbinary) 讓我可以測試文件,判斷它們是不是二進制。在使用MarkLogic Server不掌握每一個mime類型的時候是非常有用的。我用它來決斷,物流我需要一個上傳二進制文件或者其他,或指定哪種mime類型。
- [terminal-kit](https://www.npmjs.com/package/terminal-kit)用于提供命令行輸出里的代碼著色和樣式文本。在我用綠色表示成功,黃色表示警告,紅色代表主要錯誤的時候是非常有用的。
總結
我經常愉快的因為他們而驚喜,無論小工具還是我需要闡述的那些,無論多復雜,Node.js極大的簡化我的生活!
Node.js的事件驅動特性和通過擴展支持廣泛的[NPM](http://npmjs.com/),讓我可以快速的查找和使用我需要的最多神秘功能。我經常可以選擇神密的庫。
在IT今天,無論干什么工作,我都推薦你們學習Node.js。Node.js會讓你的項目騰飛!
來自: http://www.techug.com/why-i-love-nodejs-part