12月14日清單
1 readline模塊
var readline = require("readline");
// input 是必須的,output是可選的
rl = readline.createInterface({input:process.stdin,output:process.stdout});
rl.question("question?",(answer)=>{ 處理 rl.close()})
rl.on("line",(line)=>{處理})
rl.on("close",()=>{處理})
rl.setPrompt("你的提示符");
rl.prompt();
rl.write(data[,key])
rl.write("刪除緩存");
rl.write(null,{ctrl:true,name:'u'}); 可刪除還沒有有換行的緩衝區內容
能夠將rl設爲input:fs.createReadStream('txtfile'); 來藉助line事件來對文件進行逐行讀取
2 dgram模塊
只能經過var server = dgram.createSocket('udp4')來獲取 ipv4的udp實例,不能new
事件:close error
listening 當server.bind()執行後
message 當有新的數據報可用時
socket.address() 會返回一個對象,其中有遠程鏈接的地址,端口,協議(v4/v6);
即socket.address().address socket.address().port socket.address().family
socket.bind([port][,address][,callback]); bind內可選
或 socket.bind(options[,callback]) options是一個包含有地址端口等信息的對象
socket.bind(4000)
// 0.0.0.0:4000
// 當沒有端口時,端口隨機分配.當沒有地址時,地址爲0.0.0.0
// 好像同localhost用起來沒什麼區別,未深刻研究? 答案在下方
// 全部接口地址ipv4 0.0.0.0 ipv6 ::0 即會監聽全部地址,因此server.address()返回的信息爲localhost
// bind(port,address) 端口在前,順序不能亂
// bind({address:'fan',port:4000}) 經過傳一個options對象,能夠避免參數順序不對的狀況發生
// bind後會出發listening事件,並執行bind內的回調函數,因此bind內的回調和監聽listen事件選一便可,
// 若是都有的話都會觸發,同時的
socket.close([callback]);
socket.send(msg,[offset,length,]port,address[,callback])
注意length的值,當有中文等多字節字符串時,須要使用Buffer.byteLength(str)來肯定字節數,
這裏發送的是字節數,而不是字符數.
dgram.createSocket(options[,callback]); options對象,包含type(string)屬性和reuseAddr(布爾)屬性
dgram.createSocket(type[,callback]); type值爲udp4或udp6,callback響應message事件
3 assert模塊
var assert = require("assert");
// assert中可選的msg是當錯誤時,顯示的錯誤信息
// assert.notEqual(1,1);
// assert(false,"it's a false");
// assert.ok(false,"it's a false"); // assert(val,msg) 等同於 assert.ok(val,msg)
assert.deepEqual(Error('a'),Error('b'));// 當對象的自身所擁有的屬性都相等時,就深度相等
assert.deepEqual({a:1},{a:'1'}); // 相等,對每一個屬性的 ==
// assert.deepStrictEqual({a:1},{a:'1'}) // 不相等,=== 不會進行轉換
assert.equal(1,'1') // 相等 總體的 ==
assert.notEqual(1,2); // !=
assert.notStrictEqual(1,'1'); // !==
// 當ifError() 括號內的值爲真時,則拋出錯誤,及括號內的值,能夠用於回調內的error檢驗
// assert.ifError('error');
// assert.ifError(new Error());
// assert.ifError(0); // 無錯
// assert.ifError(1); // 有錯
// assert.fail(1,1,"錯誤緣由",'='); 做用是拋出一個錯誤,文字爲第三個參數,若是第三個參數未定義,
則錯誤提示爲,第一個參數加最後的操做符加第二個參數
assert.fail(0,0,"hh",'=');
4 一個小技巧
當有遞減發生而又不想出現負值,可使用return Math.max(val,0); 來確保返回值不爲負數,
減小了寫if判斷語句,程序中儘可能不出現if語句,讓其更流暢的執行
5 EventEmitter部分
EventEmitter實例的經常使用方法
emitter.addListener()
emitter.getMaxListeners();
emitter.listenerCount();
emitter.listeners();
emitter.on();
emitter.once();
emitter.removeAllListeners();
emitter.removeListener();
emitter.setMaxListeners();
net.Server會在收到新的鏈接時發送'request'事件,fs.ReadStream會在打開文件時發送'open'事件
stream.Readable對象會在每次讀取數據時發送'data'事件
myEmitter.emit("eventName",'a','b');能夠傳多個參數,只要響應的回調函數接收處理就行