如何捕获sendFile函数中的错误?

时间:2019-07-25 06:53:56

标签: node.js error-handling sendfile

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

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

如何捕获此错误?

1 个答案:

答案 0 :(得分:0)

这里基本上有四个选择:

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

您可能已经发现,回调中的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)。