nodeJS -- event、fs模块

203 阅读2分钟

浏览器js和nodeJS在event上的区别

  1. 后端继承自EventEmitter的实例,由实例进行监听和触发,而前端是dom元素

  2. 前端有些和浏览器规定好的事件名称,当然前端也可以自定义事件名,但后端一般都是自定义事件名称,规定好的事件名相对来说少很多,例如error事件就是规定好的

  3. 前端通常通过UI操作来触发,后端通过 实例.emit('自定义事件') 的方式来触发,规定好的事件例如error事件当实例出错的时候会自动触发,这个事件既能手动触发也能自动触发

4.nodeJS中事件的触发第一个参数是事件名,往后的参数就是事件监听器回调函数接收到的参数

事件的监听

const EventEmmitter = require('events');

class CustomEvent extend EventEmmitter {

}

const ce = new CustomEvent();
function fn1 () {
    console.log('fn1');
}

function fn2 () {
    console.log('fn2');
}


//监听
ce.on('test', fn1);

ce.on('test', fn2);

//只监听一次
ce.once('test', fn1);

//派发

ce.emit('test');

//移除
//第一种方式
ce.removeListener('test', fn1);

//第二种方式

ce.off('test', fn2);

//第三种方式,一次性移除这个事件上所有的listener

ce.removeAllListeners('test');

//默认一个实例绑定最多的监听器数量

ce.defaultMaxListeners

fs

读文件

fs.readFile

fs.readFileSync

写文件

fs.writeFile

fs.writeFileSync

重命名

fs.rename('./index.html', 'index1.html', (err) => {
  if(err) throw err;
})

删除

fs.unlink('./index1.html', err => {
  if(err) throw err;
})

查文件夹有哪些文件(或者说读取文件夹)

fs.readdir('./', (err, files) => {
  if(err) throw err;
  console.log(files);
})

创建文件夹

fs.mkdir('./index', (err) => {
  if(err) throw err;
  console.log('done');
})

移除文件夹

fs.rmdir('./index', (err) => {
  if(err) throw err;
  console.log('done');
})

文件夹或者文件监视

fs.watch('./', {
  recursive: true
}, (eventType, fileName) => {
  console.log(eventType, fileName);
})

监听器回调绑定到由<fs.FSWatcher>触发的 'change' 事件,但它与 eventType 的 'change' 值不同。也就是说eventType为rename或者change也好,FSWatcher类都会触发change事件,就是因为触发了change事件回调函数才会触发