一、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(request, response){ response.writeHead(200,{'Content-Type':'text/html'}); response.write('HelloWorld'); response.end() }).listen(8000);
2)在命令行中啟動服務,敲 node http.js
3)瀏覽器中輸入 http://localhost:8080/ ,頁面輸出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
參考:http://home.cnblogs.com/u/snandy/