NodeJS处理Express中异步错误(2)

要习惯使用 throw ,它使得你的代码目的明确,throw 会明确地将程序引到错误处理中间件,这对同步或异步的程序都是适用的。
遇到特殊情况,当你觉得有必要时,也可以自行 try/catch。

app.get('https://www.jb51.net/', 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)仍然会导致未捕获异常,你需要注意合理地处理这类情况:

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwyxxd.html