Lam*_*bda 5 javascript node.js promise express q
在我的应用程序的一个路由处理程序中,我正在调用一个返回 Q Promise 的方法。我不想使用该方法处理拒绝.catch,而是希望将其抛出并由 Express 应用程序的捕获所有错误处理程序捕获。
我尝试了 Q 的done方法,但它异步抛出异常,因此它不是由我的包罗万象的错误处理程序处理,而是一路向上传播,并且我的应用程序被终止:
// The route handler
function index(req, res) {
dao.findById(id).then(function (data) {
res.send(data);
}).done();
}
// The catch all event-handler
function catchAllErrorHandler(err, req, res, next) {
console.log(err, req, res);
}
// Registration of the catch-all event handler
app.use(catchAllErrorHandler);
Run Code Online (Sandbox Code Playgroud)
该错误永远不会进入捕获所有错误处理程序。有没有办法让抛出的错误得到处理catchAllErrorHandler?
这并没有直接回答你的问题,而是展示了实现你的目标的另一种方法。
Express 中的每个中间件处理程序都有签名(request, response, next)。目前您的index函数没有定义 next 。
当使用参数调用 next 时,express 认为该参数是一个错误,并对其进行适当的管理。
因此,在您的情况下,更改您的index函数以包含下一个参数,并更改.done()为.catch(next)在发生任何错误时调用下一个参数,并允许 Express 处理它。
dao.findById(id)
// Handle success
.then(function (data) {
res.send(data);
})
// Handle failure
.catch(next);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |