【问题标题】:How can I catch the errors in sendFile function?如何捕获 sendFile 函数中的错误?
【发布时间】:2023-03-12 16:29:01
【问题描述】:

在我的一条路线中,我想使用sendFile 函数发送文件,但我想捕捉发送函数期间可能发生的错误。我写了这段代码,但是我抛出的错误没有被 catch 块捕获并且应用程序崩溃:

try {
       res.sendFile(Path.join(__dirname, '../../uploads', fileName), null, (err) => {
           if (err) {
                throw err
           }
       })
} catch(err) {
       Logger.error(err);
       next(error);
}

如何捕捉到这个错误?

【问题讨论】:

    标签: node.js error-handling sendfile


    【解决方案1】:

    这里基本上有四种选择:

    1. 您在回调中处理错误,就在您的 if (err) { ... } 块中。
    2. 您从if (err) { ... } 块内部调用回调,该回调可以通知其他代码。
    3. 您设置了某种 eventEmitter(就像流对象使用的一样)并在该对象上发出错误事件,并且想要查看错误的代码会侦听该对象上的错误事件。
    4. 您使用了 Promise 并拒绝了调用代码可以监控的 Promise。

    您可能已经发现,回调中的throw err 对您没有任何好处。它只是抛出异步调用的res.sendFile() 回调,这不是您可以使用自己的代码捕获或监控的东西。这里的封闭函数已经返回,并且您显示的 try/catch 不会捕获 throw err,因为 try/catch 范围已经完成。

    在您的具体情况下,您似乎可以这样做:

       res.sendFile(Path.join(__dirname, '../../uploads', fileName), (err) => {
           if (err) {
                Logger.error(err);
                next(err);
           }
       });
    

    上面的选项 1)。

    【讨论】:

      猜你喜欢
      • 2011-05-14
      • 2012-01-25
      • 1970-01-01
      • 2015-08-02
      • 2018-06-28
      • 2020-09-22
      • 2022-01-14
      • 2011-04-05
      • 2020-10-01
      相关资源
      最近更新 更多