events.EventEmitter 基本语法
emitter.addListener(event, listener) //添加监听
emitter.on(event, listener) //添加监听
emitter.once(event, listener) //一次性监听器,利于节省资源
//addListener / on / once 用法相当
emitter.removeListener(event, listener) //删除指定监听
emitter.removeAllListeners(event, listener) //删除所有监听 <br/>
emitter.setMaxListener(n) //事件监听超10h时(默认),EventEmitter打印警告信息;0表示无限制
emitter.listeners(event) //监听指定事件
emitter.emit(event, [arg1], [arg2], [...]) //指定参数按序执行每个事件
emitter.on('someEvent', function(arg1, arg2){
console.log('listener2', arg1, arg2);
});
emitter.emit('someEvent', 'arg1', 'arg2') //抛出事件
事件处理文件 userSign.js
// d38_userSign.js
var events=require('events');
function userSign(){
this.eventEmit=new events.EventEmitter();
this.sign=function(req, res){
console.log('注册');
req['uname']='aa';
req['pwd']='bb';
this.eventEmit.emit('signOK','aa','bb');//抛出事件消息
},
this.login=function(req, res){
console.log('登录');
res.write('userName:'+req['uname']);
res.write('password:'+req['pwd']);
res.write('登录');
}
}
module.exports=userSign;
注: 本示例代码: this.eventEmit.emit(‘signOK’,‘aa’,‘bb’); 可以 this.login(); 即嵌套方式替代,效果相同;
但嵌套方式增加单任务工作量,降低运行效率; 且不利于后期维护;
事件调用文件 event.js
// d38_event.js
var http=require('http');
var events=require('events');
var userSign=require('./d38_userSign.js');
http.createServer(function(request, response){
response.writeHead(200, {'Content-Type':'text/html; charset=utf-8'});
if(request.url!=='/favicon.ico'){ //清除2次访问
user=new userSign();
user.eventEmit.once('signOK', function(uname, pwd){
response.write('注册成功');
console.log('传来uname:'+uname);
console.log('传来pwd:'+pwd);
user.login(request, response);
response.end('');
}); // 注册监听
user.sign(request, response);
}
}).listen(8000); //监听端口
console.log('Server running at http://127.0.0.1:8000/');