我对看起来像节点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; }
非常感谢
答案 0 :(得分:3)
您可以使用readFileSync对所需内容进行排序
var file = fs.readFileSync('somefile.html');
if (file) { do stuff }
else { error }
故事的寓意是你不需要存在。这纯粹是检查文件是否存在的检查。你可以运行readFile,如果它无法打开它,它将会出错。如果可以,它将返回数据。