我已经使用express框架编写了一个node.js api。我正在使用等待和异步。我在try catch块中捕获了异步函数。但是,在catch(err)方法中,不会返回err。
try {
const job = await this.jobRepository.functionDoesNotExist();
if (job.success === false) {
return res.status(404).json({
success: false,
status: 404,
data: job,
message: "Failed to retrieve job"
});
}
return res.status(200).json({
success: true,
status: 200,
data: job.data,
message: "Successfully retrieved job"
});
} catch (err) {
return res.status(500).json({
success: false,
status: 500,
data: err,
message: "The server threw an unxpected errror"
});
}
在上面的示例中,我故意调用了一个不存在的函数,从而引发错误。
我得到的答复如下。它正在击中catch块,但未将错误添加到数据对象中。
{
"success": false,
"status": 500,
"data": {},
"message": "The server threw an unxpected errror"
}
但是,如果我将以下行移出try catch块。控制台将引发以下错误。
const job = await this.jobRepository.functionDoesNotExist();
"error":{},"level":"error","message":"uncaughtException: this.jobRepository.functionDoesNotExist is not a function\nTypeError: this.jobRepository.functionDoesNotExist is not a function\n at JobController.<anonymous>
所以我的问题是,当在try catch块中进行调用时,为什么在响应中未显示此错误。
答案 0 :(得分:1)
默认情况下,错误对象不支持JSON.stringify()
。 Read Here
但是,要获取堆栈跟踪,可以像这样使用err.stack
:
return res.status(500).json({
success: false,
status: 500,
data: err.stack,
message: "The server threw an unxpected errror"
});