如何捕获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 }