1、什么是Node.js
- 本質(zhì)是JavaScript的解析器生闲;
- 是JavaScript的運(yùn)行環(huán)境;
- 是服務(wù)器程序月幌;
- 使用是V8引擎碍讯;
- 不是Web服務(wù)器。
2扯躺、為什么使用Node.js
- 提供高性能的Web服務(wù)捉兴;
- IO性能強(qiáng)大;
- 事件處理機(jī)制完善录语;
- 天然能夠處理DOM倍啥;
- 社區(qū)非常活躍澎埠,生態(tài)圈日趨完善虽缕。
3、Node.js優(yōu)勢(shì)
- 處理大流量數(shù)據(jù)失暂;
- 適合實(shí)時(shí)交互應(yīng)用;
- 完美支持對(duì)象數(shù)據(jù)庫(kù)鳄虱;
- 異步處理大量并發(fā)鏈接弟塞。
4、函數(shù)調(diào)用
- 函數(shù)調(diào)用方式分為三類:同步調(diào)用拙已、回調(diào)和異步調(diào)用决记;
- 回調(diào)是一種雙向調(diào)用模式:回調(diào)函數(shù)也可以調(diào)用主函數(shù);
- 通過(guò)回調(diào)函數(shù)來(lái)實(shí)現(xiàn)回調(diào)倍踪。
5系宫、阻塞與非阻塞
- 阻塞和非阻塞關(guān)注的是等待調(diào)用結(jié)果(消息索昂、返回值)時(shí)的狀態(tài);
- 阻塞就是做不完不準(zhǔn)回來(lái)扩借;
- 非阻塞就是你先做椒惨,我現(xiàn)看看還有沒(méi)有其他事,完了告訴我一聲潮罪。
5.1康谆、阻塞式代碼
> var fs = require('fs'); //引用Node.js的FileStream類庫(kù)
> var data = fs.readFileSync('data.txt'); //使用同步讀取方法,讀取文件
> console.log(data.toString());
5.2嫉到、非阻塞代碼
> var fs = require('fs'); //引用Node.js的FileStream類庫(kù)
> fs.readFile('data.txt', function(err, data){
if(err){
return console.log(err);
}
console.log(data.toString());
}); //使用同步讀取方法沃暗,讀取文件
> console.log('程序執(zhí)行完畢!');
6何恶、事件驅(qū)動(dòng)
- 事件驅(qū)動(dòng)模型孽锥;
- 事件與事件綁定。
6.1细层、事件處理代碼流程
- 引入events對(duì)象惜辑,創(chuàng)建eventEmitter對(duì)象;
- 綁定事件處理程序今艺;
- 觸發(fā)事件韵丑。
//第一步:
> var events = require('events');
> var eventEmitter = new events.EventEmitter();
//第二步:
> var connectHandler = function connected(){
console.log('connected被調(diào)用!');
}
> eventEmitter.on('connection', connectHandler());
//第三步:
> eventEmitter.emit('connection');
> console.log('程序執(zhí)行完畢虚缎!');
7撵彻、模塊化
- 為了讓Node.js文件可以相互調(diào)用,Node.js提供一個(gè)簡(jiǎn)單的模塊系統(tǒng)实牡;
- 模塊是Node.js應(yīng)用程序的基本組成部分陌僵;
- 文件和模塊是一一對(duì)應(yīng)的,一個(gè)Node.js文件就是一個(gè)模塊创坞;
- 這個(gè)文件可能是JavaScript代碼碗短、JSON或者編譯過(guò)的C/C++擴(kuò)展;
- Node.js中存在4類模塊(原生模塊题涨、3種文件模塊)偎谁。
7.1、模塊加載方式
- 從文件模塊緩存中加載纲堵;
- 從原生模塊(先從原生模塊緩存中加載)加載巡雨;
- 從文件加載。
>
8席函、函數(shù)
- 在JavaScript中铐望,一個(gè)函數(shù)可以作為另一個(gè)函數(shù)的參數(shù);
- 我們可以先定義一個(gè)函數(shù),然后傳遞正蛙,也可以在傳遞參數(shù)的地方直接定義函數(shù)督弓;
- Node.js中函數(shù)的使用與JavaScript類似。
> function say(word){
console.log(word);
}
> function execute(someFun, value){
someFun(value);
}
> execute(say, "Hello");