【发布时间】:2017-04-25 19:24:09
【问题描述】:
我正在 Node.js 上编写一个 Restify 应用程序。而且我需要有一个函数,当 Restify 回调中发生一些错误时调用该函数。此函数应向客户端发送响应。如果我没有使用 Promises 或异步函数,我可以这样做:
server.on('uncaughtException', (req, res, route, err) => {
log.error(err);
res.send(err);
});
但是如果我的回调是async函数,那么函数内部的异常不会被调用,而是会引发unhandledPromiseRejection。
我如何重构我的代码,使其能够像处理常见错误一样处理未处理的 Promise 拒绝?
是的,我知道我可以检查 Restify 中间件本身内部的错误,但它仍然使代码更复杂,更容易编写
if (!core.validateUUID(req.params.deviceId)) {
throw new Error(`Device ${req.params.deviceId} is wrong`)
}
然后
if (!core.validateUUID(req.params.deviceId)) {
return next(new restify.InvalidArgumentError({ body: {
success: false,
error: `Device ${req.params.deviceId} is wrong`,
} }));
}
【问题讨论】:
-
你不能只听“unhandledRejection”事件吗?见:nodejs.org/api/process.html#process_event_unhandledrejection
-
@MattDiamond 我可以,但这样我将无法获得
req和res对象,我需要res对象将错误详细信息返回给用户 -
难以置信的是,2020 年
Restify没有捕捉到Promise Rejection中的错误
标签: javascript node.js promise async-await restify