Node 学习笔记之事件发射器
2016-04-15 22:15
579 查看
我们知道Node 的有些自带的Core 模块已经封装好了现成的Event Emitter(事件发射器)。例如socket.io, net模块等。 此外Node中还可以自己构建自己的事件发射器。
可以创建一个新的JavaScript类继承事件发射器。
比如创建一个Watcher类来处理放在某个目录下的文件。然后可以用这个类创建一个工具。该工具可以监视目录(将放到里面的文件名都改成小写),并将文件复制到一个单独目录中。
扩展事件发射器需要三步:
(1)
创建类的构造器;
(2)继承事件发射器的行为;
(3) 扩展这些行为。
首先新建一个js文件,导入依赖的模块:
var events=require("events");
var util=require("util");
var fs=require("fs");
}
接下来要添加继承事件发射器行为的代码:util.inherits(Watcher,events.EventEmitter)注意inherits函数的用法,它是Node内置的util模块里的。用inherits函数继承另一个对象里的行为看起来很简洁。上面那段代码中的inherits语句等同于下面的JavaScript:Watcher.prototype=new events.EventEmitter();设置好Watcher对象后,还需要加两个新方法扩展继承自EventEmitter的方法,代码如
下所示:
watch方法循环遍历目录,处理其中的所有文件。start方法启动对目录的监控。监控用到了Node的fs.watchFile函数,所以当被监控的目录中有事情发生时,watch方法会被触发,循环遍历受监控的目录,并针对其中的每一个文件发出process事件。
定义好了Watcher类,可以用下面的代码创建一个Watcher对象,并且可以用继承自事件发射器类的on方法设定文件的处理逻辑:
var watchDir="./watch";
var processedDir="./done";
var watcher=new Watcher(watchDir,processedDir);
watcher.on("process", function process(file){
var watchFile=this.watchDir+"/"+file;
var processFile=this.processedDir+"/"+file.toLowerCase();
fs.rename(watchFile, processFile, function (err) {
if(err) throw err;
});
})
现在所有必要逻辑都已经就位了,可以用下面这行代码启动对目录的监控:
watcher.start();把Watcher代码放到脚本中,创建watch和done目录,你应该能用Node运行这个脚本,把文件丢到watch目录中,然后看着文件出现在done目录中,文件名被改成小写。这就是用事件发射器创建新类的例子。
好了,本次学习到此为止
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/tongue.gif)
。
可以创建一个新的JavaScript类继承事件发射器。
比如创建一个Watcher类来处理放在某个目录下的文件。然后可以用这个类创建一个工具。该工具可以监视目录(将放到里面的文件名都改成小写),并将文件复制到一个单独目录中。
扩展事件发射器需要三步:
(1)
创建类的构造器;
(2)继承事件发射器的行为;
(3) 扩展这些行为。
首先新建一个js文件,导入依赖的模块:
var events=require("events");
var util=require("util");
var fs=require("fs");
下面的代码是Watcher类的构造器。它的两个参数分别是要监控的目录和放置修改过的文件的目录:
function Watcher(watchDir, processedDir){ this.watchDir=watchDir; this.processedDir=processedDir;
}
接下来要添加继承事件发射器行为的代码:util.inherits(Watcher,events.EventEmitter)注意inherits函数的用法,它是Node内置的util模块里的。用inherits函数继承另一个对象里的行为看起来很简洁。上面那段代码中的inherits语句等同于下面的JavaScript:Watcher.prototype=new events.EventEmitter();设置好Watcher对象后,还需要加两个新方法扩展继承自EventEmitter的方法,代码如
下所示:
Watcher.prototype.watch= function () { var watcher=this; fs.readdir(this.watchDir, function (err, files) { if(err) throw err; for(var index in files){ watcher.emit("process",files[index]); } }); } Watcher.prototype.start= function () { console.log("strat watching "+ this.watchDir); var watcher=this; fs.watchFile(watchDir, function(){ watcher.watch(); }); }
watch方法循环遍历目录,处理其中的所有文件。start方法启动对目录的监控。监控用到了Node的fs.watchFile函数,所以当被监控的目录中有事情发生时,watch方法会被触发,循环遍历受监控的目录,并针对其中的每一个文件发出process事件。
定义好了Watcher类,可以用下面的代码创建一个Watcher对象,并且可以用继承自事件发射器类的on方法设定文件的处理逻辑:
var watchDir="./watch";
var processedDir="./done";
var watcher=new Watcher(watchDir,processedDir);
watcher.on("process", function process(file){
var watchFile=this.watchDir+"/"+file;
var processFile=this.processedDir+"/"+file.toLowerCase();
fs.rename(watchFile, processFile, function (err) {
if(err) throw err;
});
})
现在所有必要逻辑都已经就位了,可以用下面这行代码启动对目录的监控:
watcher.start();把Watcher代码放到脚本中,创建watch和done目录,你应该能用Node运行这个脚本,把文件丢到watch目录中,然后看着文件出现在done目录中,文件名被改成小写。这就是用事件发射器创建新类的例子。
好了,本次学习到此为止
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/tongue.gif)
。
相关文章推荐
- Node.js学习 - Install and Configure
- 116. Populating Next Right Pointers in Each Node
- Nodejs建站笔记-注册登录流程的简单实现
- 237.LeetCode Delete Node in a Linked List(easy)[单链表 删除节点]
- 使用express(4.X)搭建第一个Web应用【Node.js初学】
- Installing node.js on ubuntu server 15.10
- 『奇葩问题集锦』npm install 报错 node-pre-gyp ERR! node-pre-gyp -v v0.6.25
- node authentication
- Unix Filesystem Organization
- 美团酒店Node全栈开发实践
- 理解Nodejs中的事件轮询机制
- webstorm中使用nodejs,npm 配置
- NodeJS、NPM安装配置步骤
- 错误:namenode无法自动切换成active
- Nodejs Express目录结构
- 19. Remove Nth Node From End of List
- NodeJS、NPM安装配置步骤(windows版本)
- nodejs利用nodemailer发送邮件
- node解析ini文件
- nodepad++不打开上次关闭的文件