遇到特殊情况,当你觉得有必要时,也可以自行 try/catch。
app.get('/', wrap(async (req, res) => {
if (!req.params.id) {
throw new BadRequestError('Missing Id')
}
let companyLogo
try {
companyLogo = await getBase64Logo(req.params.id)
} catch (err) {
console.error(err)
companyLogo = genericBase64Logo
}
}))
要习惯使用 custom error classes ,如 BadRequestError,因为这可以让你在错误处理中间件中更方便地分类处理。
app.use(function (err, req, res, next) {
if (err instanceof BadRequestError) {
res.status(400)
return res.send(err.message)
}
...
})
需要注意
以上介绍的方法要求所有异步操作必须返回 promise。如果你的异步操作是使用回调函数的方式,你需要将其转化成 promise。(可以直接使用 Bluebird.promisifyAll 这类函数)
事件发射器(如 steams)仍然会导致未捕获异常,你需要注意合理地处理这类情况:









