问题
老版本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)也行。