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

How can I catch the errors in sendFile function?

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

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

如何捕获这个错误?

这里基本上有四种选择:

  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)。