node.js 學習(一)

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ù)庫的操作。

  1. 安裝Express

  2. 路由控制

  3. 模板引擎

==========================================
** 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ù)。

node.js 學習(一)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容