如何捕获fs.readFileSync()没有文件?
在node.js中readFile()显示如何捕获一个错误,但是对于error handling的readFileSync()函数没有评论。 因此,如果我尝试使用readFileSync()时没有文件,我得到错误Error: ENOENT, no such file or directory
。
如何捕获抛出的exception? doco没有说明抛出了什么exception,所以我不知道我需要捕捉什么exception。 我应该注意到,我不喜欢通用的“捕捉每一个可能的exception”风格的try / catch语句。 在这种情况下,我希望捕获文件不存在时发生的特定exception,并尝试执行readFileSync。
请注意,我只在启动连接尝试前执行同步function,所以我不应该使用同步function的评论是不需要的:-)
基本上,当找不到文件时, fs.readFileSync
会引发错误。 这个错误是从Error
原型中throw
,因此唯一的办法就是使用try / catch
块:
var fileContents; try { fileContents = fs.readFileSync('foo.bar'); } catch (err) { // Here you get the error when the file was not found, // but you also get any other error }
不幸的是,你不能通过查看原型链来检测到哪个错误:
if (err instanceof Error)
是你能做的最好的,对大多数(如果不是全部的话)错误都是如此。 因此,我build议你去code
属性,并检查其值:
if (err.code === 'ENOENT') { console.log('File not found!'); } else { throw err; }
这样,你只处理这个特定的错误,并重新抛出所有其他的错误。
或者,您也可以访问错误的message
属性来validation详细的错误消息,在这种情况下是:
ENOENT, no such file or directory 'foo.bar'
希望这可以帮助。
虽然接受的解决scheme是好的,我发现了一个更好的方式来处理这个问题。 你可以检查文件是否同步存在:
var file = 'info.json'; var content = ''; // Check that the file exists locally if(!fs.existsSync(file)) { console.log("File not found"); } // The file *does* exist else { // Read the file and do anything you want content = fs.readFileSync(this.local, 'utf-8'); }
你必须捕捉错误,然后检查它是什么types的错误。
try { var data = fs.readFileSync(...) } catch (err) { // If the type is not what you want, then just throw the error again. if (err.code !== 'ENOENT') throw err; // Handle a file-not-found error }