当前位置: 首页 > 面试题库 >

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

赵鸿畴
2023-03-14
问题内容

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

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

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


问题答案:

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

希望这可以帮助。



 类似资料:
  • 问题内容: 不久前,我正在寻找Java中的可嵌入的分布式版本控制系统,我想我已经在JGit中找到了它,它是git的纯Java实现。但是,示例代码或教程的方式并不多。 如何使用JGit检索某个文件的HEAD版本(就像或应该做)? 我想这涉及一些rev-tree-walking,并且正在寻找代码示例。 问题答案: 不幸的是,Thilo的答案不适用于最新的JGit API。这是我找到的解决方案: 我希望

  • 我已经在tomcat 7.0.55中部署了一个应用程序进行测试。我想捕获“HeapDumpOnOutOfMemoryError”是否正在发生。以下是我的JVM参数。 JAVA_OPTS="-server-Xms512M-Xmx2048M-XX: PermSize=256m-XX: MaxPermSize=512m-XX: UseConcMarkSweepGC-XX: UseParNewGC-XX:

  • 我有一个存储过程似乎没有正确记录错误。 代码有错误,但 catch 块似乎未生效。 try块相当长,但错误部分很简单,并且在最后出现,所以我已经对此进行了预测。 proc失败的错误是我们的老朋友“列名或提供的值的数量与表定义不匹配”。我已经修复了这个错误 - 这是一个愚蠢的懒惰错误 - 但我感到困惑为什么我的错误日志记录过程似乎没有工作 - 没有行入到我的 ExtractsErrorLog 表中。

  • 这将base64打印到控制台: 来源:https://stackoverflow.com/A/36281449/1063287 我希望能够将base64赋值给一个变量,所以我尝试了以下操作,基于这个答案: 它目前没有向控制台打印任何内容。 问题: 我正在提交一个表单在谷歌应用程序脚本环境。 我以前已经这样做了,并将一个表单对象(包括一个文件)传递给Google Apps脚本函数。 但是,这种方法的

  • 问题内容: 我在Java中有一个应用程序,其中我尝试确保如果有人在代码中退出代码System.exit(),则应调用侦听器来执行某些操作,例如记录消息并释放资源… 我如何实施它,欢迎任何建议/方法。 问题答案: 该方法可用于添加一个关闭钩子,该钩子基本上是未启动的,该钩子在Java虚拟机关闭时执行。 但是,这是应该谨慎对待的领域,因为它是在JVM生命周期的非常敏感的时间执行的。从API规范中获取该

  • 我有shell文件(deploy.sh)执行以下命令: 当其中一个命令发生错误时,我想停止bash的执行。 shell中的哪个命令可以做到这一点?