Node.js学习开始了——事件流的控制/文件读写事件的的方法

Node事件流概念

  因为Node 采用的是事件驱动的模式,其中的很多模块都会产生各种不同的事件,可由模块来添加事件处理方法,所有能够产生事件的对象都是事件模块中的 EventEmitter 类的实例。代码是全世界通用的语言,所以我们还是用代码说话:

var events = require("events"); 
  var emitter = new events.EventEmitter(); 
  emitter.on("myEvent", function(msg) { 
    console.log(msg); 
  }); 
  emitter.emit("myEvent", "Hello World.");

 简单的分析这段:

   1. 使用require()方法添加了events模块并把返回值赋给了一个变量

   2. new events.EventEmitter()这句创建了一个事件触发器,也就是所谓的事件模块中的 EventEmitter 类的实例

   3. on(event, listener)用来为某个事件 event 添加事件处理方法监听器

   4. emit(event, [arg1], [arg2], [...]) 方法用来产生事件。以提供的参数作为监听器函数的参数,顺序执行监听器列表中的每个监听器函数。

 

  EventEmitter 类中的方法都与事件的产生和处理相关:

   1. addListener(event, listener) 和 on(event, listener) 这两个方法都是将一个监听器添加到指定事件的监听器数组的末尾

   2. once(event, listener) 这个方法为事件为添加一次性的监听器。该监听器在事件第一次触发时执行,过后将被移除

   3. removeListener(event, listener) 该方法用来将监听器从指定事件的监听器数组中移除出去

   4. emit(event, [arg1], [arg2], [...]) 刚刚提到过了。

  在Node中,存在各式各样不同的数据流,Stream(流)是一个由不同对象实现的抽象接口。例如请求HTTP服务器的request是一个流,类似于stdout(标准输出);包括文件系统、HTTP 请求和响应、以及 TCP/UDP 连接等。流可以是可读的,可写的,或者既可读又可写。所有流都是EventEmitter的实例,因此可以产生各种不同的事件。

  可读流主要会产生以下事件:

  • data   当读取到流中的数据时,此事件被触发
  • end   当流中没有数据可读时,此事件被触发
  • error   当读取数据出现错误时,此事件被触发
  • close   当流被关闭时,,此事件被触发,可是并不是所有流都会触发这个事件。(例如,一个连接进入的HTTP request流就不会触发'close'事件。)

  还有一种比较特殊的 fd 事件,当在流中接收到一个文件描述符时触发此事件。只有UNIX流支持这个功能,其他类型的流均不会触发此事件。

文件读写操作函数:

nodejs File System 文件系统操作函数分类

文件系统操作相关的函数挺多的。首先可以分为两大类。

一类是异步+回调的。 一类是同步的。

在这里只对异步的进行整理,同步的只需要在函数名称后面加上Sync即可

1. 首先是一类最常规的读写函数,函数名称和形式,应该是起源于C语言的。

1
2
3
4
5
6
fs.open(文件路径,读写标识,[文件mode值,666],回调函数(err,文件句柄fd));         
fs.read(文件句柄fd,被写入的buffer,offset,length,position,回调函数(err, bytesRead, buffer));         
fs.write(文件句柄fd,被读取的buffer,offset,length,position,回调函数(err,bytesWritten,buffer));         
fs.close(文件句柄,回调函数)         
fs.truncate(文件句柄,截断长度,回调函数);         
fs.fsync(文件句柄,回调函数);

2. 直接对文件进行读写的,用起来比较方便。

1
2
3
fs.readFile(文件名,编码,回调函数(err,data));      
fs.writeFile(文件名,数据,编码,回调函数(err));      
fs.appendFile(文件名,数据,编码,回调函数(err));

3. 其它常用文件操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
判断文件是否存在     
fs.exists(文件路径,callback(是否存在));     
重命名     
fs.rename(旧文件名,新文件名,回调函数);     
文件所有者变更     
fs. chown (文件名,uid,gid,回调函数);/fs.fchown(文件句柄fd,uid,gid,回调函数);/fs.lchown(链接路径,uid,gid,回调函数);     
文件权限变更     
fs. chmod (文件名,mode,回调函数);/fs.fchmod(文件句柄,mode,回调函数);/fs.lchmod(链接路径,mode,回调函数);     
文件信息     
fs.stat(文件路径,回调函数(err.fs.Stats对象));/fs. fstat (文件句柄fd,回调函数(err.fs.Stats对象));/fs.lstat(链接路径,回调函数(err.fs.Stats对象));     
文件时间     
fs.utimes(文件路径,访问时间,新建时间,回调函数);/fs.futimes(文件句柄,访问时间,新建时间,回调函数);     
监视文件     
fs.watchFile(文件名,[options],listener_callback(当前文件的stats,改变前的stats));     
fs.unwatchFile(文件名);

4. 目录操作

1
2
3
fs. mkdir (路径,权限mode/777,回调函数);   
fs. rmdir (路径,回调函数);   
fs.readdir(路径,回调函数(err,fileNameArray));

5. 链接文件操作

1
2
3
4
5
6
创建一个链接  
fs.link(srcpath, dstpath, [callback])  
fs.symlink(destination, path, [type], [callback])  
读取链接指向的路径  
fs. readlink (path, [callback(err,linkstr)])  
fs.unlink(path,[callback]);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值