Node.js學習筆記

逆風之羽發表於2013-08-30

相關介紹

1、Node.js或者Node,是一個可以讓javascript執行在伺服器端的平臺。

2、Node.js是一個為實時Web應用開發而誕生的語言,它從誕生之初就充分考慮了再實時響應、超大規模資料要求下的可擴充套件性。這使得它摒棄了傳統平臺依靠多執行緒來實現高併發的設計思路,而是採用了單執行緒、非同步式IO、事件驅動式的程式設計模型。

3、Node.js採用現在應用於chrome的Javascript引擎V8。V8號稱目前世界上最快的Javascript引擎。

4、Node.js遵循CommonJs規範,但是也並不完全遵循。

Hello World

var http = require('http');
    http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
}).listen(1337, '127.0.0.1');

Node包管理器(npm)

npm是一個由Node.js官方提供的第三方包管理工具,就像PHP的Pear、Python的PyPI一樣。npm是一個完全由javascript實現的命令列工具,通過Node.js執行,因此嚴格來說它並屬於Node.js的一部分。

一些概念

1、REPL

在命令列使用node不加引數則會進入node的REPL(read-eval-print loop:輸入-求值-輸出迴圈)模式,就像chrome的console,你可以在其中輸入javascript程式碼,然後立即求值

2、使用supervisor

supervisor可以幫助你件事對程式碼的改動,然後重新啟動Node.js,在開發中除錯時很方便

npm install -g supervisor

3、模組和包

模組的包的概念是參照了CommonJs的標準,Node.js中一個檔案就是一個模組,可以使用require介面獲取一個模組,並且是單次載入

4、模組的型別

模組分為兩大型別,即核心模組和檔案模組,核心模組就是Node官方提供的API模組,已經編譯成了二進位制檔案,可以使用require直接呼叫,而檔案模組就是儲存為檔案的模組,可以是js,json或者C++檔案。

檔案模組的載入有兩種方式,一種是require的引數以"/","./","../"開頭的路徑形式,則使用按路徑載入,按照引數值使用絕對或相對路徑方式找到對應檔案並載入。另外一種是通過查詢node_moudles檔案載入,如果require的引數並非路徑的形式,那麼包管理器會從當前目錄的node_modules目錄開始查詢,找不到則查詢上一級目錄

5、本地模式和全域性模式

使用npm安裝包的時候會有本地模式和全域性模式兩種情況。
a)預設的npm install就是本地模式,即把包安裝到當前目錄的node_modules子目錄下面。在使用require載入模組是會嘗試搜尋node_modules子目錄,因此本地模式安裝的包可以被直接引用
b)全域性模式:在安裝包時使用引數-g就是採用的全域性模式

npm install -g package_name

使用全域性模式安裝時會註冊PATH環境變數,可以在命令列中呼叫,因此使用全域性模式安裝包是為了在命令列中呼叫相關功能

6、包的釋出

npm有一套以CommonJs為基礎的包規範(這裡是指對目錄結構標準的定義),在目錄中使用npm init,然後填寫一些互動式問題就可以產生一個符合標準的package.json,然後再使用npm publish就可以將包釋出到官網了

核心模組

1、全域性物件

global是Node.js中的全域性物件(即宿主物件),類似於瀏覽器中的window

2、全域性變數

全域性物件的屬性,其一在所有包中直接呼叫(如process、console)

3、幾個重要模組

a)常用工具util

xxx

b)事件驅動events

events是node中最重要的模組,因為node的架構就是基於事件的,events模組不僅用於使用者程式碼與Node下層事件迴圈的互動,還幾乎被所有的模組依賴。
events模組只提供一個物件events.EventEmitter,核心就是事件發射與事件監聽功能的封裝,例如:

var events = require("events");
var emitter = new events.EventEmitter();
//新增事件監聽
emitter.on("someEvent",function(arg1,arg2){
    console.log("xxx");    
});
//觸發事件
imitter.emit("someEvent","arg1","arg2");

c)檔案系統fs

提供對作業系統檔案的讀取、寫入、改名、刪除、遍歷目錄等功能的封裝。並且fs模組中的操作都提供了同步和一部兩個版本

fs.readFile
fs.open
fs.read

d)HTTP伺服器

Node.js標準庫提供了http模組,其中封裝了一個高效的HTTP伺服器和一個簡易的客戶端。http.Server是http模組中的HTTP伺服器物件,node的所有基於HTTP協議的系統都是基於它來實現的,Hello World中就實現了一個簡易的伺服器。

Node不適用的場景

1、計算密集型的程式

2、單使用者多工型應用

3、邏輯十分複雜的事務

Node.js更善於處理那些邏輯簡單但訪問頻繁的任務。

相關文章