在node.js中,readFile()显示了如何捕获错误,但是没有关于readFileSync()函数错误处理的注解。因此,如果我尝试在没有文件的情况下使用readFileSync(),我会得到错误Error: ENOENT, no such file or directory
。
我如何捕获抛出的异常?文档没有说明抛出了什么异常,所以我不知道我需要捕获什么异常。我应该注意到我不喜欢try/catch语句的通用“捕获每个可能的异常”样式。在这种情况下,我希望捕获当文件不存在时发生的特定异常,并尝试执行readFileSync。
请注意,我只在服务连接尝试之前启动时执行同步功能,因此不需要评论我不应该使用同步功能:-)
6条答案
按热度按时间e7arh2l61#
基本上,
fs.readFileSync
在找不到文件时会抛出一个错误,这个错误来自Error
原型,使用throw
抛出,因此唯一的捕获方法是使用try / catch
块:不幸的是,您无法仅通过查看其原型链来检测抛出了哪个错误:
这是您所能做的最好的选择,而且对于大多数(如果不是全部)错误都是如此,因此我建议您使用
code
属性并检查其值:这样,您就可以只处理这个特定的错误,并重新抛出所有其他错误。
或者,您也可以访问错误的
message
属性以验证详细的错误消息,在本例中为:9cbw7uwe2#
我比较喜欢这样的处理方式,可以检查文件是否同步存在:
注意:如果你的程序也删除文件,这有一个在注解中提到的竞态条件。但是如果你只写或覆盖文件,而不删除它们,那么这是完全可以的。
juzqafwq3#
您必须捕获错误,然后检查错误类型。
cuxqih214#
我在这些场景中使用立即调用的lambda:
async
版本:70gysomp5#
JavaScript try ... catch机制不能用来拦截异步API产生的错误。初学者的一个常见错误是试图在错误优先回调中使用throw:
这将不起作用,因为传递给fs.readFile的回调函数()被异步调用。调用回调时,周围的代码(包括try ... catch块)将已退出。在大多数情况下,在回调中引发错误可能会使Node.js进程崩溃。如果启用了域,或者已向process.on注册了处理程序('uncaughtException '),则可以拦截此类错误。
参考:https://nodejs.org/api/errors.html
h5qlskok6#
尝试使用Async来避免阻塞NodeJS的唯一线程。
以后可以将此异步函数与来自任何其他函数的try/catch一起使用:
快乐编码!