Node.js學習筆記

相關介紹

一、Node.js或者Node,是一個可讓javascript運行在服務器端的平臺。javascript

二、Node.js是一個爲實時Web應用開發而誕生的語言,它從誕生之初就充分考慮了再實時響應、超大規模數據要求下的可擴展性。這使得它摒棄了傳統平臺依靠多線程來實現高併發的設計思路,而是採用了單線程、異步式IO、事件驅動式的程序設計模型。java

三、Node.js採用如今應用於chrome的Javascript引擎V8。V8號稱目前世界上最快的Javascript引擎。node

四、Node.js遵循CommonJs規範,可是也並不徹底遵循。chrome

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

npm是一個由Node.js官方提供的第三方包管理工具,就像PHP的Pear、Python的PyPI同樣。npm是一個徹底由javascript實現的命令行工具,經過Node.js執行,所以嚴格來講它並屬於Node.js的一部分。json

一些概念

一、REPL

在命令行使用node不加參數則會進入node的REPL(read-eval-print loop:輸入-求值-輸出循環)模式,就像chrome的console,你能夠在其中輸入javascript代碼,而後當即求值瀏覽器

二、使用supervisor

supervisor能夠幫助你件事對代碼的改動,而後從新啓動Node.js,在開發中調試時很方便服務器

npm install -g supervisor

三、模塊和包

模塊的包的概念是參照了CommonJs的標準,Node.js中一個文件就是一個模塊,可使用require接口獲取一個模塊,而且是單次加載多線程

四、模塊的類型

模塊分爲兩大類型,即核心模塊和文件模塊,核心模塊就是Node官方提供的API模塊,已經編譯成了二進制文件,可使用require直接調用,而文件模塊就是存儲爲文件的模塊,能夠是js,json或者C++文件。架構

文件模塊的加載有兩種方式,一種是require的參數以"/","./","../"開頭的路徑形式,則使用按路徑加載,按照參數值使用絕對或相對路徑方式找到對應文件並加載。另一種是經過查找node_moudles文件加載,若是require的參數並不是路徑的形式,那麼包管理器會從當前目錄的node_modules目錄開始查找,找不到則查找上一級目錄

五、本地模式和全局模式

使用npm安裝包的時候會有本地模式和全局模式兩種狀況。
a)默認的npm install就是本地模式,即把包安裝到當前目錄的node_modules子目錄下面。在使用require加載模塊是會嘗試搜索node_modules子目錄,所以本地模式安裝的包能夠被直接引用
b)全局模式:在安裝包時使用參數-g就是採用的全局模式

npm install -g package_name

使用全局模式安裝時會註冊PATH環境變量,能夠在命令行中調用,所以使用全局模式安裝包是爲了在命令行中調用相關功能

六、包的發佈

npm有一套以CommonJs爲基礎的包規範(這裏是指對目錄結構標準的定義),在目錄中使用npm init,而後填寫一些交互式問題就能夠產生一個符合標準的package.json,而後再使用npm publish就能夠將包發佈到官網了

核心模塊

一、全局對象

global是Node.js中的全局對象(即宿主對象),相似於瀏覽器中的window

二、全局變量

全局對象的屬性,其一在全部包中直接調用(如process、console)

三、幾個重要模塊

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不適用的場景

一、計算密集型的程序

二、單用戶多任務型應用

三、邏輯十分複雜的事務

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

相關文章
相關標籤/搜索