- 什么是NodeJS
JS是腳本語言,腳本語言都需要一個解析器才能運行。對于寫在HTML頁面里的JS,瀏覽器充當了解析器的角色。而對于需要獨立運行的JS,NodeJS就是一個解析器。
每一種解析器都是一個運行環(huán)境,不但允許JS定義各種數(shù)據(jù)結構,進行各種計算,還允許JS使用運行環(huán)境提供的內(nèi)置對象和方法做一些事情。
例如運行在瀏覽器中的JS的用途是操作DOM,瀏覽器就提供了document之類的內(nèi)置對象。而運行在NodeJS中的JS的用途是操作磁盤文件或搭建HTTP服務器,NodeJS就相應提供了fs、http等內(nèi)置對象。
- 用途
NodeJS的作者說,他創(chuàng)造NodeJS的目的是為了實現(xiàn)高性能Web服務器,他首先看重的是事件機制和異步IO模型的優(yōu)越性,而不是JS。但是他需要選擇一種編程語言實現(xiàn)他的想法,這種編程語言不能自帶IO功能,并且需要能良好支持事件機制。JS沒有自帶IO功能,天生就用于處理瀏覽器中的DOM事件,并且擁有一大群程序員,因此就成為了天然的選擇。
如他所愿,NodeJS在服務端活躍起來,出現(xiàn)了大批基于NodeJS的Web服務。而另一方面,NodeJS讓前端眾如獲神器,終于可以讓自己的能力覆蓋范圍跳出瀏覽器窗口,更大批的前端工具如雨后春筍。
因此,對于前端而言,雖然不是人人都要拿NodeJS寫一個服務器程序,但簡單可至使用命令交互模式調(diào)試JS代碼片段,復雜可至編寫工具提升工作效率。
- 常用內(nèi)置模塊
fs 提供對文件的操作。http://nodejs.org/api/fs.html http://nodejs.org/api/stream.html
path 簡化路徑相關操作,并提升代碼可讀性。http://nodejs.org/api/path.html
http 提供服務端和客戶端兩種使用方式:http://nodejs.org/api/http.html
https 與 http 模塊極為類似,區(qū)別在于 https 模塊需要額外處理SSL證書。http://nodejs.org/api/https.html
url 解析URL、生成、拼接URL。http://nodejs.org/api/url.html
querystring 用于實現(xiàn)URL參數(shù)字符串與參數(shù)對象的互相轉(zhuǎn)換。http://nodejs.org/api/querystring.html
zlib 提供了數(shù)據(jù)壓縮和解壓的功能。http://nodejs.org/api/zlib.html
net 用于創(chuàng)建Socket服務器或Socket客戶端http://nodejs.org/api/net.html
- 推薦使用的框架和包:
npm install --save
express 是 Node.js 應用最廣泛的 web 框架,現(xiàn)在是 4.x 版本,它非常薄。跟 Rails 比起來,完全兩個極端。 http://expressjs.com/
utility 提供了很多常用且比較雜的輔助方法,如 utility.md5()。 https://github.com/node-modules/utility
superagent 是個 http 方面的庫,可以發(fā)起 get 或 post 請求。http://visionmedia.github.io/superagent/
cheerio 可以理解成一個 Node.js 版的 jquery,用來從網(wǎng)頁中以 css selector 取數(shù)據(jù),使用方式跟 jquery 一樣。https://github.com/cheeriojs/cheerio
eventproxy將串行等待變成并行等待,提升多異步協(xié)作場景下的執(zhí)行效率,可用于控制并發(fā)數(shù)。https://github.com/JacksonTian/eventproxy
iconv-lite 轉(zhuǎn)換編碼,如GBK轉(zhuǎn)UTF8。https://github.com/ashtuchkin/iconv-lite
async 流程控制、并發(fā)控制。https://github.com/caolan/async
- 推薦使用的開發(fā)包:npm install *** --save-dev
supertest 是專門用來配合 express (準確來說是所有兼容 connect 的 web 框架)進行集成測試的。https://github.com/tj/supertest
mocha 測試框架 http://mochajs.org/
should 斷言庫 https://github.com/tj/should.js
chai 斷言庫 http://chaijs.com/
expect 斷言庫 https://github.com/LearnBoost/expect.js/
istanbul 測試率覆蓋工具 https://github.com/gotwarlost/istanbul
benchmark 基準測試,可用于測試相同功能函數(shù)的執(zhí)行速度。 https://github.com/bestiejs/benchmark.js
- 推薦使用的開發(fā)工具:npm install -g
- node-dev 調(diào)試時代碼改動后自動重啟加載服務 https://github.com/fgnass/node-dev
- nodemon 調(diào)試時代碼改動后自動重啟加載服務 https://github.com/remy/nodemon