问题
老版本express使用async/await的情况比较少,存在大量的回调地狱,看着好烦人。
于是总想着使用async/await进行优化,然而使用了之后发现在错误捕获中间件里面并没有被捕获
app.use(function (err, req, res, next) {
console.log(err)
...
})
原因就在于express是线性模型,需要使用next(err)把错误传递下去才行
最简单的方法是使用try/catch,或者用一个大Promise把请求封装起来在catch里面捕获
try {
xxxx
} catch (error) {
next(error)
}
或者
return query().catch(err=>{next(err)})
总之就是通过next把err传递下去。
当然,也可以不中间件内捕获,遇到error直接res.send(err)也行。
Express中async/await与错误处理
探讨在老版本Express框架中使用async/await优化回调地狱的问题,介绍如何正确使用try/catch结合next(err)进行错误传递,以及使用express-async-errors包简化错误处理。
2007

被折叠的 条评论
为什么被折叠?



