Node.js监控文件变化遇到的坑


需要实现的功能是监控rules目录内的文件是否发生了变化,如果发生变化自动重新解析。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51

var fs = require('fs');
var rc = require('./rulesConf');
rc.getRulesConf(parseNext);

watchRuleFileChange('./rules/');
// watchRuleDirChange('./rules/');

function parseNext(result) {
console.log('parse next-------');
console.log(JSON.stringify(result));
}

/**
* 监控规则文件变化,自动重新解析生效
* 此种监控方式不稳定,会重复执行,不建议使用
*/
function watchRuleDirChange(ruleDir){
console.log('watching :'+ruleDir);
fs.watch(ruleDir,{persistent: true, recursive: false},function(event, filename){
// 重新执行解析过程
console.log('watching: '+filename +' '+event);
rc.getRulesConf(parseNext);
});
}

/**
* 监控规则文件变化,自动重新解析生效
* 尽量延迟监控时间为5s以上,不然会出莫名问题
*/
function watchRuleFileChange(ruleDir){
console.log('watching :'+ruleDir);
fs.readdir(ruleDir,function(error,files){
files.forEach(function(file){
watchFileChange(ruleDir+file);
});
});
}

function watchFileChange(filename){
fs.watchFile(filename,
{persistent: true, interval: 5000},
function(curr,prev){
// 重新执行解析过程
if(curr.mtime > prev.mtime){
console.log("curr.mtime:"+curr.mtime+" prev.mtime:"+prev.mtime);
rc.getRulesConf(parseNext);
}
}
);
}

文章作者: KavenRan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 KavenRan !
 上一篇
Gitlab API 获取所有项目信息 Gitlab API 获取所有项目信息
为了所有Gitlab 服务器上所有projectName、path、nameSpace、branchs等信息,需要用到Gitlab API. 首先需要配置PRIVATE-TOKEN,在Gitlab Server,Account-settin
2017-06-20
下一篇 
Node.js安装配置 Node.js安装配置
[TOC] 开发环境配置特别说明:本开发环境以WIN7系统为例 1 安装Node.js下载windons7 64位Node.jsV4.2.3版本:https://nodejs.org/en/ node-v4.2.3-x64.msi安装就不说
2015-12-15
  目录