详解nodejs 文本操作模块-fs模块(五)

2020-06-17 07:13:29易采站长站整理

// 我会认为,去一个对象中查找变量,比直接查找到一个变量,要花费多一点点的时间。

if (util.isUndefined(options.persistent)) options.persistent = true;
if (util.isUndefined(options.recursive)) options.recursive = false;

// 创建FSWatcher的实例,并执行实例中的start方法,开始监听filename的更新事件
watcher = new FSWatcher();
watcher.start(filename, options.persistent, options.recursive);

// 如果有回调函数,则添加一个绑定事件,并设置它的回调函数
if (listener) {
watcher.addListener('change', listener);
}

// 返回该实例
return watcher;
};

到这里,基本上,监听目录和文件相关的API就说完来,这里继续一些补充信息,是之前并没有说到的,首先,watchFile方法的关闭,以及再次绑定事件等,看下面的示例吧。


var fs = require("fs");

var f = fs.watch("./",function(event,filename){
console.log("event="+event);
console.log("filename="+filename);
});

f.on("change",function(event,filename){
console.log("change12");
f.close();
//关闭
});

var ff = fs.watchFile("./message.txt",function(curr,prev){
console.log("change21");
});

ff.on("change",function(){
console.log("change22");
ff.stop();
//关闭
});

因为在watch和watchFile使用时,都是返回的它们使用的构造函数的实例,所以,我们自己也可以根据这个实例,进行一些扩展,而且,这个实例,是包含整个event模块的所有的方法的,所以,可以直接绑定一些自定义事件,甚至直接触发一些自定义事件,比如,再看下面的代码:


var fs = require("fs");

var f = fs.watch("./",function(event,filename){
console.log("change11");
});

var ff = fs.watchFile("./message.txt",function(curr,prev){
console.log("change21");
});

f.emit("change");
ff.emit("change");

基本上,这个实例,就是一个EventEmitter的实例。OK,这个说到这里,就基本上结束了。

总结

注:本文将到的watchFile,watch等方法,都是属于不稳定的方法,在有些平台下,或者一些系统的设置下,可能出现获取不到准确值的情况,所以谨慎使用,这个如果可以,应该去花点时间,研究下grunt中,是如何监听文件变化的,进而补充本文中没有实现的一些功能(不稳定)。

关于Nodejs的fs模块的内容,到这里就结束了,接下来就是TCP和UDP的数据通信相关的内容了,也是创建服务器的相关内容,本模块的周期过长,中间工作有点招架不住,一直没有调节好,一直处于比较疲惫的状态下,中间的间隔竟然达到三个月之久,希望以后不会再这样来。