一些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');能够传多个参数,只要响应的回调函数接收处理就行
相关文章
相关标签/搜索