1、NodeJs簡介node
NodeJS官網上的介紹:npm
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.json
它是一個Javascript運行環境
依賴於Chrome V8引擎進行代碼解釋
事件驅動
非阻塞I/O(NodeJS遇到I/O事件會建立一個線程去執行,而後主線程會繼續往下執行的)
輕量、可伸縮,適於實時數據交互應用
單進程,單線程瀏覽器
2、NodeJs優缺點服務器
(NodeJS適合運用在高併發、I/O密集、少許業務邏輯的場景(高併發、聊天、實時消息推送))併發
1)優勢:app
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
3、NodeJs安裝
下載地址:http://nodejs.org
安裝:直接運行
查看安裝版本: node -v
4、helloworld測試
1.在Node.js安裝目錄中新建一個文件helloworld.js,內容以下:
console.log('HelloWorld');
2.控制檯中,進入nodejs目錄, 輸入指令: node hello.js
控制檯輸出: HelloWorld
5、瀏覽器訪問測試
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\n');
}).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
6、使用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,以下所示:
7、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文件夾中搜索,找不到結果則往上一級目錄,直至根目錄
8、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