一、NodeJs簡介
NodeJS官網上的介紹:
Node.js is a platform built on Chrome`s JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
它是一個Javascript執行環境
依賴於Chrome V8引擎進行程式碼解釋
事件驅動
非阻塞I/O(NodeJS遇到I/O事件會建立一個執行緒去執行,然後主執行緒會繼續往下執行的)
輕量、可伸縮,適於實時資料互動應用
單程式,單執行緒
二、NodeJs優缺點
(NodeJS適合運用在高併發、I/O密集、少量業務邏輯的場景(高併發、聊天、實時訊息推送))
1)優點:
1. 高併發(最重要的優點)
NodeJs更改連線到伺服器的方式,每個連線發射(emit)一個在NodeJS引擎程式中執行的事件(Event),放進事件佇列當中,而不是為每個連線生成一個新的OS執行緒(併為其分配一些配套記憶體))
2. 適合I/O密集型應用
2)缺點:
1. 不適合CPU密集型應用;CPU密集型應用給Node帶來的挑戰主要是:由於JavaScript單執行緒的原因,如果有長時間執行的計算(比如大循 環),將會導致CPU時間片不能釋放,使得後續I/O無法發起;
解決方案:分解大型運算任務為多個小任務,使得運算能夠適時釋放,不阻塞I/O呼叫的發起;
2. 只支援單核CPU,不能充分利用CPU
3. 可靠性低,一旦程式碼某個環節崩潰,整個系統都崩潰(原因:單程式,單執行緒)
解決方案:(1)Nnigx反向代理,負載均衡,開多個程式,繫結多個埠;
(2)開多個程式監聽同一個埠,使用cluster模組;
4. Debug不方便,錯誤沒有stack trace
三、NodeJs安裝
下載地址:http://nodejs.org
安裝:直接執行
檢視安裝版本: node -v
四、helloworld測試
1.在Node.js安裝目錄中新建一個檔案helloworld.js,內容如下:
console.log(`HelloWorld`);
2.控制檯中,進入nodejs目錄, 輸入指令: node hello.js
控制檯輸出: HelloWorld
五、瀏覽器訪問測試
1.說明:需設定埠和http引數資訊
2.例子如下:
1)nodejs安裝目錄下建立http.js檔案
複製程式碼
var http=require(`http`);
http.createServer(function (req,res) {
res.writeHead(200,{`Content-Type`:`text/plain`});
res.end(`helloWorld
`);
}).listen(1337,`127.0.0.1`);
console.log(`server running at http://127.0.0.1:1337/`);
複製程式碼
2)在命令列中啟動服務,敲 node http.js
3)瀏覽器中輸入
http://127.0.0.1:1337/
,頁面輸出HelloWorld
六、使用hotnode熱釋出(自動更新指令碼)
1)說明:如果使用章節5中的 node http.js方式釋出,則更改http.js後需要ctrc+c終止,再重新發布,使用hotnode則可以實現熱釋出,有更改時不用重新啟動
2)使用方法
1. npm -g install hotnode 安裝hotnode,可使用hotnode -v 產看hotnode版本
2. 啟動時使用 hotnode http.js,像章節5中的例子,更改reponse內容後直接在瀏覽器中重新整理頁面即可
3. 每更新一次,hotnode會列印兩條記錄, has been changed 和 node process restarted,如下所示:
七、NodeJs模組載入
1)說明:1.NodeJs可以通過模組的名稱或者模組的路徑獲取模組的引用。
2. 內建模組(core model)在node程式開始時就已經預載入了,如http模組
3. 非內建模組,模組的引用會對映到一個js檔案
2) 模組載入:使用var model = require(`modelName`);
1.執行require語句後,如果是內建模組,在node內部會載入內建模組
2.如果不是內建模組,則會通過npm安裝模組
3. require返回的物件可以是任意型別的JS物件
3)載入檔案模組
1.路徑可以是絕對路勁,也可以是相對路徑
2..js可以省略
3. 當前路勁需要加上./
var model = require(`/asset/js/model.js`);
var model = require(`/asset/js/model`);
var model = require(`../asset/js/model`);
var model = require(`./main.js`);
4)載入目錄模組
1.載入方式如下:
var model = require(`../folderName`);
2.如果資料夾中沒有定義package.json檔案則預設會載入index.js檔案
3.如果存在package.json檔案,則載入package.js中定義的檔案,package.json中定義格式如下:
{
name:`pack`;
main: `modelName.js`;
}
4.如果package.json檔案和index.js檔案都不存在,則會載入失敗。
5)如果模組名不是內建模組,不是路勁,不是資料夾,node則試圖從當前目錄中的node_modules資料夾中搜尋,找不到結果則往上一級目錄,直至根目錄
八、npm常用指令(node package manager)
1) 安裝Node模組 —— $ npm install moduleNames
2) 檢視當前目錄下已安裝的node包 ——$ npm list
3) 檢視node模組的package.json資料夾——$ npm view moduleNames
4) 檢視包的依賴關係 ——$ npm view moduleName repository.url
5) 檢視包所依賴的Node的版本 ——$ npm view moduleName engines
6) 更新node模組 ——$ npm update moduleName
7) 解除安裝node模組 ——$ npm uninstall moudleName