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ù)的操作辣卒。
安裝Express
路由控制
模板引擎
==========================================
** 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ù)僻他。