在我的一条路由中,我想使用sendFile
函数发送文件,但是我想捕捉可能在send函数期间发生的错误。我写了这段代码,但是我抛出的错误并没有被catch块和应用程序崩溃捕获:
try {
res.sendFile(Path.join(__dirname, '../../uploads', fileName), null, (err) => {
if (err) {
throw err
}
})
} catch(err) {
Logger.error(err);
next(error);
}
如何捕获此错误?
答案 0 :(得分:0)
这里基本上有四个选择:
if (err) { ... }
块中处理回调内部的错误。if (err) { ... }
块中调用回调,该回调可以通知其他代码。您可能已经发现,回调中的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)。