node.js-2

今天学习遇到了一个小插曲。原因来自于昨晚配置java的环境变量时出现了问题。

导致我今天登录时一直登录不上。在登录界面输入密码后,会跳出一个黑框,提示啥错误,一闪而过。。我试了好几次才看到几个单词。啥啥peech   dispather   disabled  完了。我放弃了,,这看下去眼睛都要被闪吓了。想起昨晚我修改了/etc/profile文档,在其中加入了java的环境变量值。

果断尝试一下改回原来的样子。

使用ctrl+alt+F1进去命令行界面。打开。etc/profile文档,把自己加进去的内容删了。就没问题了。。其中会经常提示命令无法识别,类是我们常用的sudo、vi等,要使用/usr/bash/i(好象是,会有提示的)。

先装上一个chrome吧。方便调试。这个大家应该都会的。goole一下到处都是。只是装完后要重新登录,在终端输入goole-chrome后chrome才会启动,顺便把他锁定到启动器上

(ps:为啥我锁定到启动器上,打不开chrome。。坑呢。求助。。。。。)


util


**inherits(子类,被继承的类);

//inherits.js

var util=require('util');

function Base(){
    this.name='base';
    this.base=1991;

    this.sayHello=function(){
        console.log('Hello'+this.name);
    };
}
Base.prototype.showName=function(){//原型
    console.log(this.name+'-----');
};

function Sub(){
    this.name='Sub';
}
util.inherits(Sub,Base);

var objBase=new Base();
objBase.showName();
objBase.sayHello();
console.log(objBase);
var objSub=new Sub();

//obj.sayHello();   取消注释的会报错,说找不到sayHello方法
objSub.showName();
console.log(objSub);
从输出结果可以看出,Sub只继承了Base在原型中定义的函数(我感觉有点想java中的访问控制)的showName方法。而在构造起内部创建的方法是无法获取的。也就是上面说会报错的原因。

当然不仅仅是方法,属性若想要继承的话,也可以在原型中定义,语法和方法一致如:Base.prototype.age=24;

在objSub.age也会得到24;


util.inspect

util.inspect(object,[showHidden],[depth],[colors]) 是一个将任意对象转换为字符串的方法,通常用于调试和错误的输出。

参数说明:object ,必填,要转换的对象

                     showHidden,可选,如果为true,将会输出更多隐藏信息。

                     depth,表示最大递归的层数,如果对象复杂的话,控制输出信息的多少。如果不指定depth默认会递归2层,指定为null表示将不递归层书完整遍历对象

                     color为true时,输出格式会以ANSI颜色编码输出特殊的效果

util.inspect并不会简单的直接包对象转换成字符串,即使对该对象定义一个toString方法也不会调用


events事件驱动

  事件发射器

     EventEmitter.on(event,listener)注册一个监听去,一个叫listener的回调函数

     EventEmitter.emit(event,[arg1],[arg2],[...])发送event事件

     EventEmitter.once(event,listener)注册一个监听去,一个叫listener的回调函数,触发一次后立即解除该监听器

     EentEmitter.removeListener(event,listener)移除该指定事件的某个监听器,listener必须是该事件已经注册过的监听器。

     EentEmitter.removeAllListener(event)移除所有事件的监听器,如果指定event,则移除指定事件的所有监听器。    

var events= require('events');
var emitter = new events.EventEmitter();
emitter.once('Event',function(arg1,arg2){
    console.log('listener',arg1,arg2);
});

emitter.removeAllListeners();
emitter.emit('Event','1',1991);
emitter.emit('Event','2',1991);

对于以上程序,在我清除了所有事件的所有监听器之后,不会报错。与我想的有点不一样,是还需要什么特殊处理吗?

                 

大多时候不直接使用继承EventEmitter,选择对它继承。包括fs、net、http在内的,只要是支持事件响应的核心模块都是EventEmitter的子类

原因:1.具有某个实体功能的对象实现事件符合语义,事件的监听和发射应该是一个对象的方法。

            2.js的对象机制是基于原型的,支持部分多重继承,继承EventEmitter不会打乱对象原有的继承关系。



文件系统fs

fs.readFile(url,[encoding],[callback]);异步方式-----在callback中对error进行处理

fs.readFileSync(url,[encoding]);同步方式-----需要用try  catch捕捉异常


fs.open

fs.open(path,flags,[mode],[callback(err,fd)]);

path:文件路径

flags:模式 

           r以读的方式打开  

          r+读写 

          w写,如果不存在则创建

         w+以读写方式打开,如果不存在则创建

         a:以追加模式打开,如果不存在则创建

        a+:以读取追加模式打开,如果不存在则创建

mode参数用于创建文件时给文件指定权限,默认0666(八进制,7表示读写执行,5表示读执行,4表示读)

fd会传递一个文件描述符



fs.read(fd,buffer,offset,length,position,[callback(err,bytesRead,buffer)])

fd:文件描述副

buffer:写入只想的缓冲区对象

offset:buffer写入的偏移量

length:读取的字节数

position:文件读取地址,如果是null表示当前文件指针的位置读取

回调函数传递bytesRead(等于length),buffer,表示读取的字节数和缓冲区对象

一般不使用这种方式,因为它要求你手动管理缓冲区和文件指针


fs模块有很多函数,慢慢看。。。







                    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值