- 什么是NodeJS
JS是腳本語言亚茬,腳本語言都需要一個(gè)解析器才能運(yùn)行。對(duì)于寫在HTML頁面里的JS浓恳,瀏覽器充當(dāng)了解析器的角色刹缝。而對(duì)于需要獨(dú)立運(yùn)行的JS,NodeJS就是一個(gè)解析器颈将。
每一種解析器都是一個(gè)運(yùn)行環(huán)境梢夯,不但允許JS定義各種數(shù)據(jù)結(jié)構(gòu),進(jìn)行各種計(jì)算晴圾,還允許JS使用運(yùn)行環(huán)境提供的內(nèi)置對(duì)象和方法做一些事情颂砸。
例如運(yùn)行在瀏覽器中的JS的用途是操作DOM,瀏覽器就提供了document之類的內(nèi)置對(duì)象死姚。而運(yùn)行在NodeJS中的JS的用途是操作磁盤文件或搭建HTTP服務(wù)器人乓,NodeJS就相應(yīng)提供了fs、http等內(nèi)置對(duì)象都毒。
- 用途
NodeJS的作者說色罚,他創(chuàng)造NodeJS的目的是為了實(shí)現(xiàn)高性能Web服務(wù)器,他首先看重的是事件機(jī)制和異步IO模型的優(yōu)越性账劲,而不是JS戳护。但是他需要選擇一種編程語言實(shí)現(xiàn)他的想法,這種編程語言不能自帶IO功能瀑焦,并且需要能良好支持事件機(jī)制腌且。JS沒有自帶IO功能,天生就用于處理瀏覽器中的DOM事件榛瓮,并且擁有一大群程序員铺董,因此就成為了天然的選擇。
如他所愿禀晓,NodeJS在服務(wù)端活躍起來精续,出現(xiàn)了大批基于NodeJS的Web服務(wù)。而另一方面匆绣,NodeJS讓前端眾如獲神器驻右,終于可以讓自己的能力覆蓋范圍跳出瀏覽器窗口,更大批的前端工具如雨后春筍崎淳。
因此堪夭,對(duì)于前端而言,雖然不是人人都要拿NodeJS寫一個(gè)服務(wù)器程序拣凹,但簡單可至使用命令交互模式調(diào)試JS代碼片段森爽,復(fù)雜可至編寫工具提升工作效率。
- 常用內(nèi)置模塊
fs 提供對(duì)文件的操作嚣镜。http://nodejs.org/api/fs.html http://nodejs.org/api/stream.html
path 簡化路徑相關(guān)操作爬迟,并提升代碼可讀性。http://nodejs.org/api/path.html
http 提供服務(wù)端和客戶端兩種使用方式: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 用于實(shí)現(xiàn)URL參數(shù)字符串與參數(shù)對(duì)象的互相轉(zhuǎn)換象颖。http://nodejs.org/api/querystring.html
zlib 提供了數(shù)據(jù)壓縮和解壓的功能。http://nodejs.org/api/zlib.html
net 用于創(chuàng)建Socket服務(wù)器或Socket客戶端http://nodejs.org/api/net.html
- 推薦使用的框架和包:
npm install --save
express 是 Node.js 應(yīng)用最廣泛的 web 框架姆钉,現(xiàn)在是 4.x 版本说订,它非常薄。跟 Rails 比起來潮瓶,完全兩個(gè)極端陶冷。 http://expressjs.com/
utility 提供了很多常用且比較雜的輔助方法,如 utility.md5()毯辅。 https://github.com/node-modules/utility
superagent 是個(gè) http 方面的庫埂伦,可以發(fā)起 get 或 post 請(qǐng)求。http://visionmedia.github.io/superagent/
cheerio 可以理解成一個(gè) 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 (準(zhǔn)確來說是所有兼容 connect 的 web 框架)進(jìn)行集成測試的逆日。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 基準(zhǔn)測試,可用于測試相同功能函數(shù)的執(zhí)行速度萄凤。 https://github.com/bestiejs/benchmark.js
- 推薦使用的開發(fā)工具:npm install -g
- node-dev 調(diào)試時(shí)代碼改動(dòng)后自動(dòng)重啟加載服務(wù) https://github.com/fgnass/node-dev
- nodemon 調(diào)試時(shí)代碼改動(dòng)后自動(dòng)重啟加載服務(wù) https://github.com/remy/nodemon