如何捕获 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);
}
如何捕获这个错误?
这里基本上有四种选择:
- 您在回调中处理错误,就在您的
if (err) { ... }
块中。
- 您从
if (err) { ... }
块内部调用回调,该回调可以通知其他代码。
- 您设置了某种 eventEmitter(如流对象使用的)并在该对象上发出错误事件,并且想要查看错误的代码会侦听该对象上的错误事件。
- 您使用 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)。
在我的一条路线中,我想使用 sendFile
函数发送文件,但我想捕获发送函数期间可能发生的错误。我写了这段代码,但我抛出的错误没有被 catch 块捕获,应用程序崩溃了:
try {
res.sendFile(Path.join(__dirname, '../../uploads', fileName), null, (err) => {
if (err) {
throw err
}
})
} catch(err) {
Logger.error(err);
next(error);
}
如何捕获这个错误?
这里基本上有四种选择:
- 您在回调中处理错误,就在您的
if (err) { ... }
块中。 - 您从
if (err) { ... }
块内部调用回调,该回调可以通知其他代码。 - 您设置了某种 eventEmitter(如流对象使用的)并在该对象上发出错误事件,并且想要查看错误的代码会侦听该对象上的错误事件。
- 您使用 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)。