小编典典

如何为 fs.readFileSync() 捕获没有文件?

all


node.js中readFile()显示了如何捕获错误,但是没有关于错误处理的readFileSync()函数的注释。因此,如果我在没有文件的情况下尝试使用
readFileSync() ,则会收到错误消息Error: ENOENT, no such file or directory

如何捕获抛出的异常?doco 没有说明抛出了哪些异常,所以我不知道我需要捕获哪些异常。我应该注意,我不喜欢通用的“捕捉每一个可能的异常”风格的
try/catch 语句。在这种情况下,我希望捕获文件不存在时发生的特定异常,并尝试执行 readFileSync。

请注意,我仅在提供连接尝试之前的启动时执行同步功能,因此不需要我不应该使用同步功能的评论:-)


阅读 150

收藏
2022-08-21

共1个答案

小编典典

基本上,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)

是你能做的最好的,这对于大多数(如果不是全部)错误都是正确的。因此,我建议您使用该code物业并检查其价值:

if (err.code === 'ENOENT') {
  console.log('File not found!');
} else {
  throw err;
}

这样,您只处理此特定错误并重新抛出所有其他错误。

或者,您也可以访问错误的message属性来验证详细的错误消息,在这种情况下是:

ENOENT, no such file or directory 'foo.bar'

希望这可以帮助。

2022-08-21