节点js - fs文件存在 - 有点困惑

时间:2014-02-16 18:00:26

标签: javascript node.js

我对看起来像节点fs()的各种方法有点困惑,以检查文件是否存在。

我可以:(http://nodejs.org/api/fs.html#fs_fs_readfile_filename_options_callback

fs.readFile('somefile.html', function (err, data) {
  if (err)  { /* it doesn't */  }
  else { /* it does */ }
});

但是在错误下运行条件感觉很奇怪(预计文件有时不在那里)

然后是fs.exists()(http://nodejs.org/api/fs.html#fs_fs_exists_path_callback

fs.exists('somefile.html', function (exists) {
  if(exists) { /* it does */ }
  else {  /* it doesn't */ }
});

这感觉更合乎逻辑,但后来我读到了这个:

“在打开文件之前检查文件是否存在是一种反模式,使您容易受到竞争条件的影响:另一个进程可能会在调用fs.exists()和fs.open()之间删除该文件。 只需打开文件并在错误处理时处理错误。

我明白了,所以在我采用'错误方式'之前 -

检查文件的常用方法是什么(如果是这样打开)/ (也许最快就是整齐的答案) - 使用节点fs()

我的计划中的逻辑只是 -

if (file does not exist) { continue the tasks to create it; } 
else { read it and respond with it; }

非常感谢

1 个答案:

答案 0 :(得分:3)

您可以使用readFileSync对所需内容进行排序

var file = fs.readFileSync('somefile.html');
if (file) { do stuff }
else { error }

故事的寓意是你不需要存在。这纯粹是检查文件是否存在的检查。你可以运行readFile,如果它无法打开它,它将会出错。如果可以,它将返回数据。