node.js 學(xué)習(xí)(一)

key value
node script.js 運(yùn)行 Node.js 程序的基本方法
node -e "console.log('Hello World');" 輸出 Hello World
node 進(jìn)入node 的 REPL 模式:
輸入—求值—輸出循環(huán)
npm [install/i] [package_name] npm安裝包本地模式
npm [install/i] -g [package_name] npm安裝包全局模式
npm install <package.json folder> npm手動(dòng)安裝迫吐,路徑指向packag.json存在目錄
node debug debug.js 本地調(diào)試
node --debug[=port] script.jsnode --debug-brk[=port] script.js 遠(yuǎn)程調(diào)試(兩種)

==========================================
** Nodejs 核心模塊**
==========================================
4.1 全局對(duì)象 全局變量
Node.js 中的全局對(duì)象是 global端壳,所有全局變量(除了 global 本身以外)都是 global對(duì)象的屬性呈队。
全局變量:process console

process.argv是命令行參數(shù)數(shù)組process.stdout是標(biāo)準(zhǔn)輸出流process.stdin是標(biāo)準(zhǔn)輸入流process.nextTick(callback)的功能是為事件循環(huán)設(shè)置一項(xiàng)任務(wù)................................
console.log():向標(biāo)準(zhǔn)輸出流打印字符并以換行符結(jié)束。 console.error():與 console.log() 用法相同慨灭,只是向標(biāo)準(zhǔn)錯(cuò)誤流輸出朦乏。console.trace():向標(biāo)準(zhǔn)錯(cuò)誤流輸出當(dāng)前的調(diào)用棧。

4.2 Util
util.inherits(sub, base):實(shí)現(xiàn)對(duì)象間原型繼承

Sub 僅僅繼承了 Base 在原型中定義的函數(shù)氧骤,而構(gòu)造函數(shù)內(nèi)部創(chuàng)造的屬性和函數(shù)都沒有被 Sub 繼承呻疹。在原型中定義的屬性不會(huì)被 console.log 作為對(duì)象的屬性輸出。

util.inspect(object,[showHidden],[depth],[colors]):將任意對(duì)象轉(zhuǎn)換為字符串

4.3 events
events 是 Node.js 最重要的模塊
events.EventEmitter()

EventEmitter常用的API筹陵。EventEmitter.on(event, listener) 為指定事件注冊(cè)一個(gè)監(jiān)聽器刽锤,接受一個(gè)字符串 event 和一個(gè)回調(diào)函數(shù) listener。EventEmitter.emit(event, [arg1], [arg2], [...]) 發(fā)射 event 事件朦佩,傳遞若干可選參數(shù)到事件監(jiān)聽器的參數(shù)表并思。EventEmitter.once(event, listener) 為指定事件注冊(cè)一個(gè)單次監(jiān)聽器,即監(jiān)聽器最多只會(huì)觸發(fā)一次语稠,觸發(fā)后立刻解除該監(jiān)聽器宋彼。EventEmitter.removeListener(event, listener) 移除指定事件的某個(gè)監(jiān)聽器,listener 必須是該事件已經(jīng)注冊(cè)過的監(jiān)聽器。EventEmitter.removeAllListeners([event]) 移除所有事件的所有監(jiān)聽器输涕,如果指定 event音婶,則移除指定事件的所有監(jiān)聽器。emitter.emit('error'); EventEmitter 定義了一個(gè)特殊的事件 error占贫,它包含了“錯(cuò)誤”的語(yǔ)義
包括 fs桃熄、 net先口、http 在內(nèi)的型奥,只要是支持事件響應(yīng)的核心模塊都是 EventEmitter 的子類。
4.4 文件系統(tǒng)fs

提供了文件的讀取碉京、寫入厢汹、更名、刪除谐宙、遍歷目錄烫葬、鏈接等 POSIX 文件系統(tǒng)操作。
與其他模塊不同的是凡蜻, fs 模塊中所有的操作都提供了異步的和同步的兩個(gè)版本搭综,

fs.readFile(filename,[encoding],[callback(err,data)]):讀取文件 如果不指定encoding callback中的data以 Buffer 形式表示的二進(jìn)制數(shù)據(jù),反之是一個(gè)解析后的字符串划栓。

fs.readFileSync(filename, [encoding]):是 fs.readFile 同步的版本兑巾。
如果有錯(cuò)誤發(fā)生, fs 將會(huì)拋出異常忠荞,你需要使用 try 和 catch 捕捉并處理異常fs.open(path, flags, [mode], [callback(err, fd)]):是 POSIX open 函數(shù)的封裝
fs.read(fd, buffer, offset, length, position, [callback(err, bytesRead,buffer)]) 是 POSIX read 函數(shù)的封裝蒋歌,相比 fs.readFile 提供了更底層的接口。

文件系統(tǒng)fs有很多方法委煤,可查看相應(yīng)文檔

4.5 HTTP服務(wù)器

http.Server:一個(gè)基于事件的 HTTP 服務(wù)器堂油,所有的請(qǐng)求都被封裝為獨(dú)立的事件,開發(fā)者只需要對(duì)它的事件編寫響應(yīng)函數(shù)即可實(shí)現(xiàn) HTTP 服務(wù)器的所有功能碧绞。http.ServerRequest 是 HTTP 請(qǐng)求的信息府框,是后端開發(fā)者最關(guān)注的內(nèi)容。獲取get讥邻、post請(qǐng)求的內(nèi)容
http.ServerResponse 是返回給客戶端的信息迫靖,決定了用戶最終能看到的結(jié)果。

HTTP客戶端
http.request(options, callback)發(fā)起 HTTP請(qǐng)求计维。http.get(options, callback) http 是 http.request 的簡(jiǎn)化版袜香,自動(dòng)將請(qǐng)求方法設(shè)為 GET 請(qǐng)求,同時(shí)不需要手動(dòng)調(diào)用 req.end()鲫惶。http.ClientRequest 是由 http.request 或 http.get 返回產(chǎn)生的對(duì)象蜈首,表示一個(gè)已經(jīng)產(chǎn)生而且正在進(jìn)行中的 HTTP請(qǐng)求。它提供一個(gè) response 事件,即 http.request或 http.get 第二個(gè)參數(shù)指定的回調(diào)函數(shù)的綁定對(duì)象欢策。http.ClientResponse 與 http.ServerRequest 相似吆寨,提供三個(gè)事件 data、 end和 close踩寇,分別在數(shù)據(jù)到達(dá)啄清、傳輸結(jié)束和連接結(jié)束時(shí)觸發(fā)
==========================================

==========================================
** 使用Node.js 進(jìn)行Web開發(fā)**
==========================================

介紹 Express 框架、 MVC 設(shè)計(jì)模式俺孙、 ejs 模板引擎以及 MongoDB 數(shù)據(jù)庫(kù)的操作辣卒。

  1. 安裝Express

  2. 路由控制

  3. 模板引擎

==========================================
** Node.js 進(jìn)階**
==========================================
6.1 模塊加載機(jī)制

控制流

cluster模塊

==========================================
** Other**
==========================================
作用域(函數(shù) 全局) 閉包 對(duì)象(構(gòu)造函數(shù) 上下文對(duì)象 原型)

作用域的嵌套關(guān)系不是在調(diào)用時(shí)確定的,而是在定義時(shí)確定的睛榄。

JavaScript通過約定在所有私有屬性前加上下劃線表示這個(gè)屬性是私有的荣茫,外部對(duì)象不應(yīng)該直接讀寫它。但這只是個(gè)非正式的約定场靴。

call 和 apply 的功能是以不同的對(duì)象作為上下文來調(diào)用某個(gè)函數(shù)啡莉。call 可以用于實(shí)現(xiàn)對(duì)象的繼承call 和 apply 的功能是一致的func.call(thisArg[, arg1[, arg2[, ...]]])func.apply(thisArg[, argsArray])
==========================================
** Nodejs編程規(guī)范**
==========================================
縮進(jìn)

兩空格

行寬

80個(gè)字符

語(yǔ)句分隔符

分號(hào)

變量定義

使用var定義變量

變量名和屬性名

小駝峰式命名法

函數(shù)

一般函數(shù)使用小駝峰式命名法,對(duì)于構(gòu)造函數(shù)使用大駝峰式命名法

引號(hào)

一律為單引號(hào)

關(guān)聯(lián)數(shù)組的初始化

將 var = { 放在一行旨剥,下面每行一對(duì)鍵值咧欣,保持兩空格的縮進(jìn),以分號(hào)結(jié)尾轨帜, }; 最后單獨(dú)另起一行魄咕。對(duì)于每對(duì)鍵值,除非鍵名之中有空格或者有非法字符阵谚,否則一律不用引號(hào)蚕礼。

等號(hào)

盡量使用 === 而不是 ==

命名函數(shù)

盡量給構(gòu)造函數(shù)和回調(diào)函數(shù)命名。
對(duì)于回調(diào)函數(shù)梢什, Node.js的API和各個(gè)第三方的模塊通常約定回調(diào)函數(shù)的第一個(gè)參數(shù)是錯(cuò)誤對(duì)象err奠蹬,如果沒有錯(cuò)誤發(fā)生,其值為 undefined嗡午。

對(duì)象定義

盡量將所有的成員函數(shù)通過原型定義囤躁,將屬性在構(gòu)造函數(shù)內(nèi)定義,然后對(duì)構(gòu)造函數(shù)使用new 關(guān)鍵字創(chuàng)建對(duì)象荔睹。

繼承

避免使用復(fù)雜的繼承狸演,如果的確需要繼承,那么盡量使用Node.js的util模塊中提供的inherits函數(shù)僻他。

node.js 學(xué)習(xí)(一)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宵距,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吨拗,更是在濱河造成了極大的恐慌满哪,老刑警劉巖婿斥,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異哨鸭,居然都是意外死亡民宿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門像鸡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來活鹰,“玉大人,你說我怎么就攤上這事只估≈救海” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵仅乓,是天一觀的道長(zhǎng)赖舟。 經(jīng)常有香客問我蓬戚,道長(zhǎng)夸楣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任子漩,我火速辦了婚禮豫喧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幢泼。我一直安慰自己紧显,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布缕棵。 她就那樣靜靜地躺著孵班,像睡著了一般。 火紅的嫁衣襯著肌膚如雪招驴。 梳的紋絲不亂的頭發(fā)上篙程,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音别厘,去河邊找鬼虱饿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛触趴,可吹牛的內(nèi)容都是我干的氮发。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼冗懦,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼爽冕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起披蕉,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤颈畸,失蹤者是張志新(化名)和其女友劉穎前塔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體承冰,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡华弓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了困乒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寂屏。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖娜搂,靈堂內(nèi)的尸體忽然破棺而出迁霎,到底是詐尸還是另有隱情,我是刑警寧澤百宇,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布考廉,位于F島的核電站,受9級(jí)特大地震影響携御,放射性物質(zhì)發(fā)生泄漏昌粤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一啄刹、第九天 我趴在偏房一處隱蔽的房頂上張望涮坐。 院中可真熱鬧,春花似錦誓军、人聲如沸袱讹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)捷雕。三九已至,卻和暖如春壹甥,著一層夾襖步出監(jiān)牢的瞬間救巷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工盹廷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留征绸,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓俄占,卻偏偏與公主長(zhǎng)得像管怠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缸榄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容