一些node模塊的學習思考

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');能夠傳多個參數,只要響應的回調函數接收處理就行
相關文章
相關標籤/搜索