//事件驅動events //events是node最重要的模塊沒有之一,由於node.js自己的架構就是事件式的,而他提供了惟一的接口,因此堪稱node.js事件編程的基石; //events幾乎被全部模塊依賴 //事件發射器 //EventEmitter支持多個事件監聽器,監聽器會依次調用; var emitter = require('events').EventEmitter; var e = new emitter(); //爲go事件增長2個監聽器 e.on('go',function(obj,willDoing){ console.log(obj + ',will do ' + willDoing); }) e.on('go',function(obj,isDoing){ console.log(obj + ',is doing ' +isDoing ); }) //發射 e.emit('go','smile','homework'); //smile,will do homework //smile,is doing homework //EventEmitter經常使用API //爲指定事件建立一個監聽器,接受一個字符串event和一個回調函數listener; e.on(event,listener); //發射event事件,接受N個參數; e.emit(event,[arg1],[arg2].....[argN]); //爲指定事件註冊一個單詞監聽器,即監聽器只會觸發一次; e.once(event,listener); //移除指定事件的某個監聽器,listener必須是註冊過的監聽器 e.removeListener(event,listener); //移除全部事件的全部監聽器,若是指定event則移除指定事件的全部監聽器; e.removeAllListeners([event]); //error事件 //遇到異常的時候會發射error事件 e.emit('error'); //繼承EventEmitter //大多數時候,咱們不會直接使用EventEmitter,而是在對象中繼承他,包括http,fs,net,只要支持事件響應的核心模塊,都是EventEmitter的子類; //文件系統fs //fs模塊是文件操做的封裝,它提供了文件的讀取,寫入,改名,刪除,遍歷目錄,連接等Posix操做 //fs模塊和其餘模塊不一樣所有提供了異步和同步操做 var fs = require('fs'); //fs.readFile(); //讀取文件函數 //filename:文件名,encoding:編碼,callback(err,data):err錯誤,data內容; fs.readFile(filename,[encoding],[callback(err,data)]); //讀取文件函數(同步版) //若有錯誤須要用try..catch來處理 //fs.readFileSync(filename,[encoding]); //fs.open(); //Posix open函數的封裝 //fs.open與c#中的fopen相似接受兩個必選參數 //path:文件路徑 //flags能夠是如下值: //{ r : 讀取 模式打開文件; r+ : 讀寫 模式打開文件; w : 寫入 模式打開文件, 沒有 則建立 w+ : 讀寫 模式打開文件, 沒有 則建立 a : 追加 模式打開文件, 沒有 則建立 a+ : 讀取追加 模式打開文件, 沒有 則建立 //} //mode參數用於建立文件時給文件指定權限,默認是0666.回調函數將會傳遞一個文件描述符fd //文件權限指的是posix操做系統中對文件讀取和訪問權限的規範,一般用一個八進制數來表示 //例如:0754表示文件全部者的權限是7(讀,寫,執行), //同組用戶權限是5(讀,執行),其餘用戶權限是4(讀),寫成字符表示就是-rwxr-xr-- //文件描述符是一個非負整數,表示操做系統內核爲當前進程所維護的打開文件的記錄表索引 fs.open(path,flags,[mode],[callback(err,fd)]); //fs模塊函數表 打開文件 fs.open(path,flags,[mode],callback(err,fd)); 關閉文件 fs.close(fd,[callback(err)]); 讀取文件內容 fs.readFile(filename,[encoding],[callback(err,data)]); 寫入文件內容 fs.writeFile(filename,[encoding],[callback(err)]); 刪除文件 fs.unlink(path,[callback(err)]);