| key | value |
|---|---|
| node script.js | 運行 Node.js 程序的基本方法 |
| node -e "console.log('Hello World');" | 輸出 Hello World |
| node | 進入node 的 REPL 模式: 輸入—求值—輸出循環(huán) |
| npm [install/i] [package_name] | npm安裝包本地模式 |
| npm [install/i] -g [package_name] | npm安裝包全局模式 |
| npm install <package.json folder> | npm手動安裝,路徑指向packag.json存在目錄 |
| node debug debug.js | 本地調(diào)試 |
| node --debug[=port] script.jsnode --debug-brk[=port] script.js | 遠程調(diào)試(兩種) |
==========================================
** Nodejs 核心模塊**
==========================================
4.1 全局對象 全局變量
Node.js 中的全局對象是 global,所有全局變量(除了 global 本身以外)都是 global對象的屬性。
全局變量:process console
process.argv是命令行參數(shù)數(shù)組process.stdout是標準輸出流process.stdin是標準輸入流process.nextTick(callback)的功能是為事件循環(huán)設置一項任務................................
console.log():向標準輸出流打印字符并以換行符結束。 console.error():與 console.log() 用法相同,只是向標準錯誤流輸出。console.trace():向標準錯誤流輸出當前的調(diào)用棧。
4.2 Util
util.inherits(sub, base):實現(xiàn)對象間原型繼承
Sub 僅僅繼承了 Base 在原型中定義的函數(shù),而構造函數(shù)內(nèi)部創(chuàng)造的屬性和函數(shù)都沒有被 Sub 繼承。在原型中定義的屬性不會被 console.log 作為對象的屬性輸出。
util.inspect(object,[showHidden],[depth],[colors]):將任意對象轉(zhuǎn)換為字符串
4.3 events
events 是 Node.js 最重要的模塊
events.EventEmitter()
EventEmitter常用的API。EventEmitter.on(event, listener) 為指定事件注冊一個監(jiān)聽器,接受一個字符串 event 和一個回調(diào)函數(shù) listener。EventEmitter.emit(event, [arg1], [arg2], [...]) 發(fā)射 event 事件,傳遞若干可選參數(shù)到事件監(jiān)聽器的參數(shù)表。EventEmitter.once(event, listener) 為指定事件注冊一個單次監(jiān)聽器,即監(jiān)聽器最多只會觸發(fā)一次,觸發(fā)后立刻解除該監(jiān)聽器。EventEmitter.removeListener(event, listener) 移除指定事件的某個監(jiān)聽器,listener 必須是該事件已經(jīng)注冊過的監(jiān)聽器。EventEmitter.removeAllListeners([event]) 移除所有事件的所有監(jiān)聽器,如果指定 event,則移除指定事件的所有監(jiān)聽器。emitter.emit('error'); EventEmitter 定義了一個特殊的事件 error,它包含了“錯誤”的語義
包括 fs、 net、http 在內(nèi)的,只要是支持事件響應的核心模塊都是 EventEmitter 的子類。
4.4 文件系統(tǒng)fs
提供了文件的讀取、寫入、更名、刪除、遍歷目錄、鏈接等 POSIX 文件系統(tǒng)操作。
與其他模塊不同的是, fs 模塊中所有的操作都提供了異步的和同步的兩個版本,
fs.readFile(filename,[encoding],[callback(err,data)]):讀取文件 如果不指定encoding callback中的data以 Buffer 形式表示的二進制數(shù)據(jù),反之是一個解析后的字符串。
fs.readFileSync(filename, [encoding]):是 fs.readFile 同步的版本。
如果有錯誤發(fā)生, fs 將會拋出異常,你需要使用 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有很多方法,可查看相應文檔
4.5 HTTP服務器
http.Server:一個基于事件的 HTTP 服務器,所有的請求都被封裝為獨立的事件,開發(fā)者只需要對它的事件編寫響應函數(shù)即可實現(xiàn) HTTP 服務器的所有功能。http.ServerRequest 是 HTTP 請求的信息,是后端開發(fā)者最關注的內(nèi)容。獲取get、post請求的內(nèi)容
http.ServerResponse 是返回給客戶端的信息,決定了用戶最終能看到的結果。
HTTP客戶端
http.request(options, callback)發(fā)起 HTTP請求。http.get(options, callback) http 是 http.request 的簡化版,自動將請求方法設為 GET 請求,同時不需要手動調(diào)用 req.end()。http.ClientRequest 是由 http.request 或 http.get 返回產(chǎn)生的對象,表示一個已經(jīng)產(chǎn)生而且正在進行中的 HTTP請求。它提供一個 response 事件,即 http.request或 http.get 第二個參數(shù)指定的回調(diào)函數(shù)的綁定對象。http.ClientResponse 與 http.ServerRequest 相似,提供三個事件 data、 end和 close,分別在數(shù)據(jù)到達、傳輸結束和連接結束時觸發(fā)
==========================================
==========================================
** 使用Node.js 進行Web開發(fā)**
==========================================
介紹 Express 框架、 MVC 設計模式、 ejs 模板引擎以及 MongoDB 數(shù)據(jù)庫的操作。
安裝Express
路由控制
模板引擎
==========================================
** Node.js 進階**
==========================================
6.1 模塊加載機制
控制流
cluster模塊
==========================================
** Other**
==========================================
作用域(函數(shù) 全局) 閉包 對象(構造函數(shù) 上下文對象 原型)
作用域的嵌套關系不是在調(diào)用時確定的,而是在定義時確定的。
JavaScript通過約定在所有私有屬性前加上下劃線表示這個屬性是私有的,外部對象不應該直接讀寫它。但這只是個非正式的約定。
call 和 apply 的功能是以不同的對象作為上下文來調(diào)用某個函數(shù)。call 可以用于實現(xiàn)對象的繼承call 和 apply 的功能是一致的func.call(thisArg[, arg1[, arg2[, ...]]])func.apply(thisArg[, argsArray])
==========================================
** Nodejs編程規(guī)范**
==========================================
縮進
兩空格
行寬
80個字符
語句分隔符
分號
變量定義
使用var定義變量
變量名和屬性名
小駝峰式命名法
函數(shù)
一般函數(shù)使用小駝峰式命名法,對于構造函數(shù)使用大駝峰式命名法
引號
一律為單引號
關聯(lián)數(shù)組的初始化
將 var = { 放在一行,下面每行一對鍵值,保持兩空格的縮進,以分號結尾, }; 最后單獨另起一行。對于每對鍵值,除非鍵名之中有空格或者有非法字符,否則一律不用引號。
等號
盡量使用 === 而不是 ==
命名函數(shù)
盡量給構造函數(shù)和回調(diào)函數(shù)命名。
對于回調(diào)函數(shù), Node.js的API和各個第三方的模塊通常約定回調(diào)函數(shù)的第一個參數(shù)是錯誤對象err,如果沒有錯誤發(fā)生,其值為 undefined。
對象定義
盡量將所有的成員函數(shù)通過原型定義,將屬性在構造函數(shù)內(nèi)定義,然后對構造函數(shù)使用new 關鍵字創(chuàng)建對象。
繼承
避免使用復雜的繼承,如果的確需要繼承,那么盡量使用Node.js的util模塊中提供的inherits函數(shù)。