Node.js监听文件变化的实现方法
在Node.js中,监听文件变化并对其进行处理是十分常见的场景。可以使用fs模块的方法实现此功能。fs模块提供了一些方法来监视文件的变化。这里我们介绍一下fs.watch()和fs.watchFile()两种方法。
- fs.watch()方法
该方法是基于事件的,当文件发生变化时,会触发相应的事件。具体用法如下:
const fs = require('fs');
const watcher = fs.watch('./file.txt', () => {
console.log('文件发生变化了');
});
watcher.on('error', (err) => {
console.error(`监听失败,错误信息:${err}`);
});
上面代码中,使用fs.watch()方法监听文件变化。当文件发生变化时,控制台会打印出'文件发生变化了'。
- fs.watchFile()方法
该方法是轮询式的,会在一定时间间隔内轮询文件是否有变化。具体用法如下:
const fs = require('fs');
fs.watchFile('./file.txt', { interval: 100 }, (curr, prev) => {
console.log(`文件被修改时间是:${curr.mtimeMs},上次修改时间是:${prev.mtimeMs}`);
});
上面代码中,使用fs.watchFile()方法轮询文件变化。当文件发生变化时,代码会打印出修改时间和上次修改时间。
以上两种方法可以根据具体场景选择使用。如果要实时地监控文件变化,则使用fs.watch()方法;如果需要坚持文件变化是否发生,则使用fs.watchFile()方法即可。
示例
下面给出一个具体的使用场景的示例:
场景:有一个配置文件config.json,当该文件发生变化时,需要重新读取该文件中的配置。
const fs = require('fs');
const watchConfig = (callback) => {
fs.watchFile('./config.json', { interval: 100 }, (curr, prev) => {
// 当文件发生变化时立即调用回调函数
if (curr.mtimeMs !== prev.mtimeMs) {
callback();
}
});
}
// 示例的回调函数
const reloadConfig = () => {
console.log('重新读取配置文件');
const config = JSON.parse(fs.readFileSync('./config.json'));
console.log(`数据库连接地址:${config.dbUrl}`);
}
watchConfig(reloadConfig);
上面代码中,当config.json文件发生变化时,会重新读取文件中的配置,并打印出数据库连接地址。使用fs.watchFile()方法监视文件变化,如果config.json发生变化,则重新加载配置。
另一个示例:
场景:有一个文件目录dir,需要监测该目录下文件的变化。
const fs = require('fs');
const watchDir = () => {
fs.watch('./dir', (event, filename) => {
console.log(`${filename} 发生了 ${event} 事件`);
});
}
watchDir();
上面代码中,使用fs.watch()方法监视dir目录下的文件变化。如果dir目录下的文件发生变化,则会在控制台中打印出相应的事件信息。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:node.js监听文件变化的实现方法 - Python技术站