NodeJS Filesystem观看两次或更多次投掷事件

Rip*_*Off 3 c++ filesystems events inotify node.js

我正在使用以下方法在Ubuntu上观看我的NodeJS服务器的配置文件:

for( var index in cfgFiles ) {
    fs.watch(cfgFiles[index], function(event, fileName) {
        logger.info("======> EVENT: " + event);
        updateConfigData(fileName);
    });
}
Run Code Online (Sandbox Code Playgroud)

因此,每当我保存配置文件时,处理器函数至少两次接收"change"事件,因为相同的文件名导致updateConfigData()被多次执行.使用C++/iNotify观看配置文件时,我遇到了相同的行为.

有没有人知道导致这种行为的原因是什么?

has*_*sin 5

简答:这不是Node,文件真的改变了两次.

答案很长

我有一个非常类似的方法,我用于我的开发设置.我的经理进程监视所有js源文件(如果它是开发计算机并在群集上重新启动子进程).

我没有注意到这个,因为它只是开发设置; 但在我读完你的问题后,我看了一眼,发现我有同样的行为.

我在本地计算机上编辑文件,每当我保存时,我的编辑器都会通过sftp更新它们.每次保存时,文件的更改事件都会被触发两次.

我检查了fs.watch调用返回的FSWatcher对象的监听器('change'); 但它只显示我的事件处理程序一次.

然后我做了我应该先做的测试:在服务器上"触摸file.js",它只触发一次.所以,对我来说,它不是Node; 但文件真的改变了两次.当文件被打开以进行写入(而不是追加)时,它可能会触发更改,因为它会清空内容.然后,当写入新内容时,它会再次触发该事件.

这对我没有任何问题; 但是如果你想阻止它,你可以通过保留每个文件的调用号码并在偶数索引调用上做任何事情来在事件处理函数中进行奇偶控制.